如何使用SimpleXml获取元素的innerText

时间:2012-10-10 14:19:11

标签: php simplexml

我还是比较新的SimpleXml。我想做什么:

我有很多xml文件,它们的构建大致相同。我的问题是我的目标节点中有时会有更多节点。示例(试图获取身体):

xml-file 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-file 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只在节点中吐出文本,而不考虑目标节点中的任何其他节点?

3 个答案:

答案 0 :(得分:13)

为了遍历

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;

答案 1 :(得分:0)

您不需要添加note它应该是

第一个

echo $xml->body;

第二个

echo $xml->body->b ;

输出

My name is CHIKA CHIKA Slim-Shady

答案 2 :(得分:0)

echo (string)$xml->body;

为我工作