我对 SimpleXml 还很陌生。我正在尝试做的事情:
我有很多 xml 文件,它们的构建方式大致相同。我的问题是有时我的目标节点中有更多节点。示例(尝试获取身体):
xml 文件 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<firstname>My name is WHAT</firstname>
<lastname>My name is WHO</lastname>
<body>My name is CHIKA CHIKA Slim-Shady</body>
</note>
xml 文件 2
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<firstname>My name is WHAT</firstname>
<lastname>My name is WHO</lastname>
<body><b>My name is CHIKA CHIKA Slim-Shady</b></body>
</note>
我可以毫无问题地获取第一个文件中的文本:
$xml = simplexml_load_file("filename.xml");
echo $xml->note->body;
但是当我尝试在第二个文件中执行相同操作时,我什么也没得到。
如何让 php 只吐出节点中的文本,而不考虑目标节点内的任何其他节点?
为了遍历
echo $xml->note->body;
要工作,您的标记需要是
<note>
<note>
<body>
…
为了避免此类错误,最好在标记中的根元素之后命名您
simplexml_load_file
的变量,例如
$note = simplexml_load_string($xml);
要获取 SimpleXmlElement 的“innerText”,您可以执行以下操作:
echo strip_tags($note->body->asXml());
asXML()
方法将为您提供“outerXML”,然后您可以使用strip_tags
将其删除。
另一种方法是将节点导入 DOM,然后获取它的
nodeValue
echo dom_import_simplexml($note->body)->nodeValue;
echo (string)$xml->body;
为我工作
不需要添加
note
应该是
第一个
echo $xml->body;
第二个
echo $xml->body->b ;
输出
My name is CHIKA CHIKA Slim-Shady