3

次の構造のxmlドキュメントがあります。

<?xml version="1.0" encoding="UTF-8"?>
<items>
  <item>
    <id>1</id>
    <url>www.test.com</url>
  </item>
  <item>
    <id>2</id>
    <url>www.test2.com</url>
  </item>
</items>

idフィールドの値1などのノード値を検索できるようにしたいと思います。次に、そのノードが見つかったら、親ノード(<item>)を選択し、その中に新しい子を挿入します。

domドキュメントの使用の概念は知っていますが、この場合の使用方法がわかりません。

4

2 に答える 2

5

これは出発点である必要があります:

$dom = new DOMDocument;
$dom->loadXML($input);
$ids = $dom->getElementsByTagName('id');
foreach ($ids as $id) {
  if ($id->nodeValue == '1') {
    $child = $dom->createElement('tagname');
    $child->appendChild($dom->createTextNode('some text'));
    $id->parentNode->appendChild($child);
  }
}
$xml = $dom->saveXML();

またはそれに近いもの。

于 2010-01-21T06:52:15.480 に答える
3

同じことをもっと簡単な方法で行うことができます。<id/>値が1親を選択しているノードを探す代わりに、関係を逆にして<id/>、値が。である子を持つノードを探すことができます1

これはXPathで非常に簡単に行うことができ、SimpleXMLで行う方法は次のとおりです。

$items = simplexml_load_string(
    '<?xml version="1.0" encoding="UTF-8"?>
    <items>
      <item>
        <id>1</id>
        <url>www.test.com</url>
      </item>
      <item>
        <id>2</id>
        <url>www.test2.com</url>
      </item>
    </items>'
);

$nodes = $items->xpath('*[id = "1"]');
$nodes[0]->addChild('new', 'value');

echo $items->asXML();
于 2010-01-22T01:09:08.263 に答える