php - 如何使用 SimpleXml 获取元素的 innerText

标签 php simplexml

我对 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;

关于php - 如何使用 SimpleXml 获取元素的 innerText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821611/

相关文章:

php - 如何从文本 block 中提取权重和其他元数据?

php - 为什么 PHP 在 fclose() 之后继续输出到 CSV 文件?

PHP - MySQL 到 SimpleXML,确保正确的编码

php - xPath 只找到 *

php - 将 bool 值存储在 xml 文档中并使用 PHP SimpleXML 读取

php意外转换为int

php - 使用 SimpleXML 读取参数名称

javascript - WordPress 网站 : homepage redirects to "login" page (non-existent now)

php - 更新 Select 查询循环所基于的字段

php - wordpress在自定义页面上传图片