如何找到某个 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;
您好,我遍历了 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;