2017-02-26 8 views
0

私はXMLファイルとfor-each項目を持っていますが、カテゴリ名とサブカテゴリ名の取得方法はわかりませんし、xmlも編集できません。xml(配列なし)からデータを取得する方法

これは私のXMLファイルです:

<?xml version='1.0' encoding='UTF-8'?> 
<data> 
    <category name="test-cat1"> 
    <subcat name="test-subcat1"> 
     <item name="test-name1">data1</item> 
     <item name="test-name2">data2</item> 
     <item name="test-name3">data3</item> 
    </subcat> 
    <subcat name="test-subcat2"> 
     <item name="test-name4">data4</item> 
     <item name="test-name5">data5</item> 
     <item name="test-name6">data6</item> 
    </subcat> 
    </category> 
    <category name="test-cat2"> 
    <subcat name="test-subcat3"> 
     <item name="test-name7">data7</item> 
     <item name="test-name8">data8</item> 
     <item name="test-name9">data9</item> 
    </subcat> 
    <subcat name="test-subcat4"> 
     <item name="test-name10">data10</item> 
     <item name="test-name11">data11</item> 
     <item name="test-name12">data12</item> 
    </subcat> 
    </category> 
</data> 

これは私のPHPスクリプトです:

<?php 

$xml = simplexml_load_file('test.xml'); 

    foreach($xml->xpath('//item') as $item){ 

    echo $item . '<br>'; 
    echo $item['name'] . '<br>'; 
    echo /*item category*/; 
    echo /*item sub-category*/; 
    echo "<br>"; 

    } 

?> 

と私は、この結果が欲しい:あなたとXPathを使用している場合

data1 
test-name1 
test-cat1 
test-subcat1 

data2 
test-name2 
test-cat1 
test-subcat1 

... 
+0

[PHPを使用してXMLファイルを解析する方法](http://stackoverflow.com/questions/8775669/how-to-parse-xml-file-using-php) – tambre

答えて

1

$item->xpath('ancestor::category')[0]['name']$item->xpath('parent::subcat')[0]['name']の値を取得する必要があります:

代わりに SimpleXMLElement::children()通じ
foreach($data->xpath('//item') as $item){ 

    echo $item . '<br>'; 
    echo $item['name'] . '<br>'; 
    echo $item->xpath('ancestor::category')[0]['name'] . '<br>'; 
    echo $item->xpath('parent::subcat')[0]['name'] . '<br>'; 
    echo "<br>"; 

    } 
+0

ありがとうございます! –

0

反復:

<?php 

$xml = simplexml_load_file('test.xml'); 

foreach($xml->children() as $cat){ 
    $catName = $cat["name"]; 
    foreach($cat->children() as $subcat){ 
     $subcatName = $subcat["name"]; 
     foreach($subcat->children() as $child){ 
      echo "$child", "\n", $child["name"], "\n", $subcatName, "\n", $catName, "\n\n"; 
     } 
    } 
} 

は、この出力を与える:"$child"は、その文字列の内容に$子を変換するために使用されていることを

data1 
test-name1 
test-subcat1 
test-cat1 

data2 
test-name2 
test-subcat1 
test-cat1 

data3 
test-name3 
test-subcat1 
test-cat1 

data4 
test-name4 
test-subcat2 
test-cat1 

data5 
test-name5 
test-subcat2 
test-cat1 

data6 
test-name6 
test-subcat2 
test-cat1 

data7 
test-name7 
test-subcat3 
test-cat2 

data8 
test-name8 
test-subcat3 
test-cat2 

data9 
test-name9 
test-subcat3 
test-cat2 

data10 
test-name10 
test-subcat4 
test-cat2 

data11 
test-name11 
test-subcat4 
test-cat2 

data12 
test-name12 
test-subcat4 
test-cat2 

注意を。これは(string $child)または$child->__toString()と同じです。

関連する問題