我正在使用SimpleXML来解析XMl文档。 我需要能够读取/更新节点属性。
在此XML文档中
<root>
<node>ABC</node>
<key>123</key>
<node2>
<key>456</key>
</node2>
<key>789</key>
</root>
如何读取/更新所有关键节点?该文档没有特定的结构,所以我需要能够在不知道其位置的情况下找到它们。假设我想将关键节点中的数字乘以2。我该怎么办?
韩国社交协会
答案 0 :(得分:8)
我发现这个问题非常懒惰,但无论如何
$sxe = new SimpleXmlElement($xml);
foreach($sxe->xpath('//key') as $key) $key[0] *= 2;
echo $sxe->asXML();
有很多questions about SimpleXml on Stack Overflow。请在asking your question之前搜索它们。 PHP手册也有涵盖Basic Usage的例子。
答案 1 :(得分:1)
<?php
$xml = '<root>
<node>ABC</node>
<key>123</key>
<node2>
<key>456</key>
</node2>
<key>789</key>
</root>';
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $node)
{
$newNode = $dom->createDocumentFragment();
$newNode->appendXML($node->wholeText . ' replaced');
$node->parentNode->replaceChild($newNode, $node);
}
echo $dom->saveXML();
答案 2 :(得分:1)
最简单的API是QueryPath(或phpQuery):
$qp = qp($xml);
foreach ($qp->find("key") as $key) {
//@todo: add verification that it's indeed numeric text
$key->text( $key->text() * 2 );
}
但“SimpleXML”
可能有类似的东西