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 回答