0

PHP に XML ドキュメントを読み取らせるのに苦労しています。選択した catid に基づいて、各ノードからコンテンツをエコーし​​ようとしています。

XML: text.xml

<root>
  <category catid='1'>
    <text id='TXT1'><![CDATA[ Lorem Ipsum ]]></text>
    <text id='TXT2'><![CDATA[ Lorem Ipsum ]]></text>
    <text id='TXT3'><![CDATA[ Lorem Ipsum ]]></text>
  </category>
  <category catid='2'>
    <text id='TXT1'><![CDATA[ Lorem Ipsum ]]></text>
    <text id='TXT2'><![CDATA[ Lorem Ipsum ]]></text>
    <text id='TXT3'><![CDATA[ Lorem Ipsum ]]></text>
  </category>
</root>

PHP:

<?php  
$xml = simplexml_load_file('/path/to/text.xml');
$category = $xml->xpath("//category[@catid='1']/text");
$ids = ['TXT1', 'TXT2', 'TXT3'];

foreach($ids as $id){
  echo $category[$id]; //I'm not quite sure how to do this bit.
}
?>

どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

2

XPATH と一緒に DOM 拡張機能を使用してそれを行う方法の例を次に示します。

$doc = new DOMDocument();
$doc->loadXML($xml);

$selector = new DOMXPath($doc);

$result = $selector->query("//category[@catid='1']");
if($result->length !== 1) {
    die('BAD xml');
}

$category = $result->item(0);
$ids = array('TXT1', 'TXT2', 'TXT3');

foreach($ids as $id){
    // note $category as the second argument. meaning that the query
    // is relative to the category node and not to the root node
    $textResult = $selector->query("text[@id='$id']", $category);
    if($textResult->length < 1) {
        die('BAD xml');
    }

    $text = $textResult->item(0)->nodeValue;
    echo $text, PHP_EOL;
}
于 2013-02-05T20:25:59.593 に答える
1

DOMDocument::getElementById を使用できます。詳細については、getElementByIdを参照してください。

于 2013-02-05T20:16:27.113 に答える