可能是一个简单的问题要回答某人:::
的xml:
<foobar>
<foo>i am a foo</foo>
<bar>i am a bar</bar>
<foo>i am a <bar>bar</bar></foo>
</foobar>
在上面,我想显示<foo
&gt;的所有元素。当脚本到达嵌套&lt;的行时bar&gt;结果是“我是一个酒吧”..这不是我希望的结果。
是否无法按原样打印出该元素的全部内容,因此我看到:“我是<bar
&gt;条</bar
&gt; “
PHP:
$xml = file_get_contents('sample');
$dom = new DOMDocument;
@$dom->loadHTML($xml);
$resources= $dom->getElementsByTagName('foo');
foreach ($resources as $resource){
echo $resource->nodeValue . "\n";
}
答案 0 :(得分:1)
查看类似的问题:
答案 1 :(得分:0)
经过一些拖钓并试图用SimpleXML做我需要的东西后,我得出了以下结论。我对SimpleXML的问题在于元素的位置。如果xml是结构化的,并且层次结构是标准的...我没有问题。
例如,如果XML是一个网页,并且<foo>
元素在任何地方,那么SimpleXML没有像getElementsByTagName
那样的良好工具来提取元素,无论它在哪里......
<?php
$doc = new DOMDocument();
$doc->load('sample');
$element_name = 'foo';
if ($doc->getElementsByTagName($element_name)->length > 0) {
$resources = $doc->getElementsByTagName($element_name);
foreach ($resources as $resource) {
$id = null;
if (!$resource->hasAttribute('id')) {
$resource->setAttribute('id', gen_uuid());
}
$innerHTML = null;
$children = $resource->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
$innerHTML .= rtrim($tmp_doc->saveHTML());
}
$resource->nodevalue = $innerHTML;
}
}
echo $doc->saveHTML();
?>
答案 2 :(得分:0)
您可以尝试使用XPath,而不是编写所有代码。该表达式将为“// foo”,它将获取名为“foo”的文档中所有元素的列表。