2010-01-29 65 views
5

Tôi đã được yêu cầu phân tích một tệp đơn giản được lưu trữ dưới dạng tệp XML, dữ liệu sẽ được đưa vào cơ sở dữ liệu mysql.Phân tích dữ liệu XML bằng cách sử dụng php để đưa vào cơ sở dữ liệu mysql

Tuy nhiên tôi hoàn toàn không biết phải làm gì và sau khi tìm kiếm trực tuyến, tất cả các ví dụ được cho là quá phức tạp cho vấn đề của tôi hoặc không phải là giải pháp đúng. Tệp XML trông giống như sau:

<shop> 
<products> 
    <product id="1" name="Cornetto" price="1.20" description="Traditional Cornetto" /> 
    <product id="2" name="Smarties" price="1.00" description="Smarties Icecream" /> 
</products> 

<stocks> 
    <stock id="1" amount="242" price="pounds" /> 
    <stock id="2" amount="11" price="pounds" /> 
</stocks> 

Tôi đã thử xem SimpleXML và tôi nghĩ đó là hướng tôi phải đi nhưng tôi không biết.

Bất kỳ trợ giúp hoặc con trỏ nào đều tuyệt vời.

+0

Bạn đã quên thẻ đóng) trong ví dụ xml của bạn – Thirler

+0

trùng lặp: http://stackoverflow.com/questions/2161722/parsing- xml-data-using-php-to-put-in-mysql-cơ sở dữ liệu –

Trả lời

4

Giả sử các tập tin được gọi là data.xml

$string = file_get_contents('data.xml') đọc toàn bộ tập tin vào $string.

$xml = new SimpleXMLElement($string); phân tích chuỗi đó và chuyển đổi nó thành cây đối tượng tương tự như tài liệu thực tế. Vì vậy, nếu đó là tài liệu -

<root> 
    <b> 
    <c>first</c> 
    <c>second</c> 
    </b> 
</root> 

Đối tượng SimpleXMLElement sẽ được sử dụng như:

$xml->b    // gets all children of b (c[0] and c[1]) 
print $xml->b->c[0] // gets the first c, will print "first" 
4

Bạn có thể sử dụng ví dụ SimpleXMLElementxpath

<?php 
$xmlStr = <<<EOF 
<?xml version="1.0"?> 
<shop> 
<products> 
    <product id="1" name="Cornetto" price="1.20" description="Traditional Cornetto" /> 
    <product id="2" name="Smarties" price="1.00" description="Smarties Icecream" /> 
</products> 
<stocks> 
    <stock id="1" amount="242" price="pounds" /> 
    <stock id="2" amount="11" price="pounds" /> 
</stocks> 
</shop> 
EOF; 

$xml=new SimpleXMLElement($xmlStr); 

// get product line with xpath for example 
$products=$xml->xpath("/shop/products/product"); 
if ($products) { 
// loop over each product node 
foreach ($products as $product) { 
    // do whatever you want with the data 
    echo("id=>".$product["id"].", name=>".$product["name"]."<br/>"); 
} 
} 

// same for stock 
// get product line with xpath for example 
$stocks=$xml->xpath("/shop/stocks/stock"); 
if ($stocks) { 
// loop over each product node 
foreach ($stocks as $stock) { 
    // do whatever you want with the data 
    echo("id=>".$stock["id"].", amount=>".$stock["amount"]."<br/>"); 
} 
} 

?> 
5

Cá nhân tôi như định dạng XML bình thường vì vậy tôi đã thay đổi nó vì nó dễ đọc hơn một chút nhưng đây là cách bạn có thể sử dụng nó:

$xmlstr = <<<XML 
<?xml version='1.0' standalone='yes'?> 
<shop> 
<products> 
    <product> 
     <id>1</id> 
     <name>Cornetto</name> 
     <price>1.20</price> 
     <description>Traditional Cornetto</description> 
    </product> 
    <product> 
     <id>2</id> 
     <name>Smarties</name> 
     <price>1.00</price> 
     <description>Smarties Icecream</description> 
    </product> 
</products> 
<stocks> 
    <stock> 
     <id>1</id> 
     <amount>242</amount> 
     <price>pounds</price> 
    </stock> 
    <stock> 
     <id>2</id> 
     <amount>11</amount> 
     <price>pounds</price> 
    </stock> 
</stocks> 
</shop> 
XML; 

Xử lý phần:

$xml = new SimpleXMLElement($xmlstr); 
echo 'single value: <br />'; 
echo $xml->products->product[0]->id; // get single value 

echo '<br /><br />'; 

//Loop trough multiple products 
echo 'multiple values: <br />'; 
foreach($xml->products->product as $product) 
{ 
    echo $product->id.' - '; 
    echo $product->name.' - '; 
    echo $product->price.' - '; 
    echo $product->description; 
    echo '<br/>'; 
} 
1
$xml = simplexml_load_file($filename); 
foreach($xml->product as $product) {    

    foreach($product->attributes() as $name => $attribute) { 
    echo "$name = $attribute"; 
    }   
} 
+0

Điều đó không làm gì cho tôi. Tôi chỉ có một trang trống. Có lẽ tôi nên đề cập đến các tập tin đã có một yếu tố nó như thế này. Phải chi đã thực hiện một sự khác biệt? – Matthew

0
$xml = simplexml_load_file($filename); 

foreach($xml->products->product as $not) 
{ 
    foreach($not->attributes() as $a => $b) 
    { 
     echo $a,'="',$b,"\"<br />"; 
    } 
} 
+0

Bạn có thể muốn thêm một số văn bản khác để mô tả những gì bạn đang làm và tại sao. – Sgoettschkes

Các vấn đề liên quan