如何找到某个 XML-Element 并将其添加为新元素?

How to find a certain XML-Element and add it as a new one?

您好,我遍历了 XML 文档并搜索了特定的单词(有效),然后我想要某个元素(如果该部分包含该单词)。

<product>
    <title>TestProduct</title>
    <Specifications>
      <item name="Specifications1">Test</item>
      <item name="Specifications2">Hello World</item>
    </Specifications>
    <body>
      <item name="Color">Black</item>
    </body>
 </product>

我试过这个:

<?php

$dom = new DOMDocument;
$dom->load('Test.xml');
# set up the xpath
$xpath = new DOMXPath($dom);
$append= $dom->getElementsByTagName('Text');
print_r($append);
foreach ($xpath->query("*[contains(., 'Test')]") as $item) {
    $element = $dom->createElement('ID', '123');
    $append->appendChild($element);
}    
?>

但它不起作用有人可以给我提示吗?坦克 ;)

问题是您尝试将新元素添加到错误的位置。这将 getElementsByTagName 和 XPath 合并为一个循环,然后将新元素添加到它找到的任何元素。

$dom = new DOMDocument;
$dom->load('Test.xml');
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//*[contains(., 'Black')]") as $item) {
    $element = $dom->createElement('ID', '123');
    $item->appendChild($element);
}

echo $dom->saveXML();

查看 XPath 如何找到包含 'Test' 的任何元素。然后它将新元素添加到它找到的每个元素。 我更改的主要内容是您将 ID 添加到 $append 而不是 $item.

如果您只想更新特定文本的第一个实例...

$matchList = $xpath->query("//*[contains(text(), 'Black')]");
$element = $dom->createElement('ID', '123');
$matchList->item(0)->appendChild($element);
echo $dom->saveXML().PHP_EOL;