我正在尝试更改" text" xml节点的值如下:
<set>
<a><b:x>VALUE1</b:x></a>
<c:y>VALUE2</c:y>
<d><e><f/><g:z>VALUE3</g:z></e></d>
<h>VALUE4</h>
</set>
我想要处理的XML节点文件非常无序,
$src = file_get_contents('file.xml') ;
$xml = new SimpleXMLElement($src);
array_walk($xml->xpath('//*'), function(&$node) {
echo $node."\n" ; // how to reach inline text value?
});
echo $xml->asXML();
如何访问和操作内联值?
答案 0 :(得分:1)
SimpleXML只有SimpleXMLElement对象 - 表示元素节点。您可以使用Xpath获取其他节点类型,但SimpleXML无法完全表示它们。
在DOM中,您可以使用Xpath轻松获取文本节点并进行修改:
$xml = <<<'XML'
<set xmlns:b="urn:b" xmlns:c="urn:c" xmlns:g="urn:g">
<a><b:x>VALUE1</b:x></a>
<c:y>VALUE2</c:y>
<d><e><f/><g:z>VALUE3</g:z></e></d>
<h>VALUE4</h>
</set>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('//text()[normalize-space() != ""]') as $textNode) {
echo $textNode->data, "\n";
$textNode->data = strtolower($textNode->data);
}
echo $document->saveXml();
输出:
VALUE1
VALUE2
VALUE3
VALUE4
<?xml version="1.0"?>
<set xmlns:b="urn:b" xmlns:c="urn:c" xmlns:g="urn:g">
<a><b:x>value1</b:x></a>
<c:y>value2</c:y>
<d><e><f/><g:z>value3</g:z></e></d>
<h>value4</h>
</set>
选择文档中的任何文本节点://text()
忽略空白节点://text()[normalize-space() != ""]