0

私はこれで立ち往生しており、ネット上で答えを見つけることができません。DOM を使用して XML をロードしたいと考えています。次のスキームの XML があります。

<type1>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type1>
<type1>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type1>
...
<type2>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type2>
<type2>
   <other>...</other>
   <number>bla</number>
   <other>...</other>
</type2>

type1 と type2 の両方のデータが複数回発生します。タグ番号は両方のタイプで発生します。私が使うとき

$searchNode = $xmlHandler->getElementsByTagName("number"); 

両方のタイプの数値を取得します。type1 または type2 の数字だけを取得するにはどうすればよいですか?

更新: Kami と Ikku の提案に基づいて、DOM で解決しました。作業コードの下:

<?php  
$xmlHandler = new DOMDocument();
$xmlHandler->load("xmldocumentname.xml");

$xpath = new DOMXPath($xmlHandler);
$searchNodes = $xpath->query("/type1");
foreach( $searchNodes as $searchNode ) { 
    $xmlItem = $searchNode->getElementsByTagName("number"); 
    $number = $xmlItem->item(0)->nodeValue; 
    $xmlItem = $searchNode->getElementsByTagName("other"); 
    $other = $xmlItem->item(0)->nodeValue; 

    echo "NUMBER=" . $number . "<br>";
    echo "OTHER=" . $other . "<br>";

}
?> 
4

2 に答える 2

2

親の特定の値を許可するように検索を拡張する必要があります。は、探しているタグのgetElementsByTagName名前に制限されるため、一般的な検索はできません。より一般化された検索を使用します。以下の例ではライブラリxpathから使用しています。simplexml

$xmlHandler = simplexml_load_file("somexmlfile.xml");

$searchNode = $xmlHandler->xpath("type1/number"); // Gets type1 numbers
$searchNode = $xmlHandler->xpath("type2/number"); // Gets type2 numbers

DOM で同じことを行うには - xpath オブジェクトを作成する追加の手順がありますが、これは検索を容易にするために必要です。

// Create new DOM object:
$dom = new DomDocument();
$dom->loadXML($xml);

$xpath = new DOMXPath($dom);
$searchNode = $xpath->query("type1/number");
$searchNode = $xpath->query("type2/number");

上記はテストされていません。必要に応じて変更します。

于 2013-01-15T12:42:39.620 に答える
1

最初に必要なすべてのタイプ (1 または 2) を検索し、その後、その結果セットで必要なタグ名を検索すると思います。したがって、2 つのステップのプロセスが 1 行にまとめられている可能性があるため、2 つのステップが機能しているときに最適化できるかどうかを確認する必要があります。

于 2013-01-15T12:41:14.543 に答える