我见过其他与simplexml和node value有关的问题,但找不到问题的答案。
我有一个PHP var,其中包含一个像这样形成的xml文档:
<div id="container">
<div id="header"></div>
<div id="main">
##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
<div>my content here</div>
<span>and there</span>
</div>
<div id="footer"> </div>
</div>
我想检索 节点值。但是使用以下代码,我还检索标记:
$xml = simplexml_load_string($_POST['newsletter_body']);
$att = 'id';
foreach ($xml->children() as $el) {
if($el->attributes()->$att == 'main') {
$body_content = $el->asXml();
}
}
有人能告诉我如何只获得节点值(不使用xpath)?
要清楚,现在我明白了:
<div id="main">
##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
<div>my content here</div>
<span>and there</span>
</div>
我只想要:
##CONTENTS## cd <strong>dscsdcsd</strong> sdcsc
<div>my content here</div>
<span>and there</span>
非常感谢
答案 0 :(得分:1)
根据@Tomalak的建议,这是Stackoverflow: PHP SimpleXML get innerXML的副本 并且你不能做得比使用simplexml API更好。
function simplexml_innerXML($xml)
{
$content="";
foreach($node->children() as $child)
$content .= $child->asXml();
return $content;
}
在您的代码中,将$body_content = $el->asXml();
替换为$body_content = simplexml_innerXML($el);
但是,您也可以切换到另一个用于区分innerXML
(您要查找的内容)和outerXML
(您现在获得的内容)的API。 Microsoft Dom libary提供了这种区别,但遗憾的是PHP DOM没有。
我发现PHP XMLReader API
提供了这种区别。见readInnerXML()。虽然这个API在处理XML方面有很多不同的方法。试试吧。
最后,我要强调的是,XML并不是要将数据提取为子树,而是将其作为值。这就是为什么你在找到合适的API时遇到麻烦的原因。将HTML子树存储为值(并转义所有标记)而不是XML子树将更“标准”。还要注意一些HTML synthax并不总是与XML兼容(即<br> vs ,<br/>
)。无论如何,在实践中,你的方法对于编辑xml文件肯定更方便。