使用php解析xml时忽略嵌套元素
也许有一个简单的问题可以回答: xml:使用php解析xml时忽略嵌套元素,php,xml,Php,Xml,也许有一个简单的问题可以回答: xml: 在对SimpleXML进行了一些跟踪和尝试之后,我得出了以下结论。我对SimpleXML的问题是元素在哪里。如果xml是结构化的,并且层次结构是标准的。。。我没有问题 例如,如果XML是一个web页面,并且元素在任何地方,SimpleXML没有像getElementsByTagName这样的好功能来将元素拉到任何地方 <?php $doc = new DOMDocument(); $doc->load('sample'); $element_
在对SimpleXML进行了一些跟踪和尝试之后,我得出了以下结论。我对SimpleXML的问题是元素在哪里。如果xml是结构化的,并且层次结构是标准的。。。我没有问题 例如,如果XML是一个web页面,并且
元素在任何地方,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();
?>
您可以尝试XPath,而不是编写所有这些代码。该表达式将是“//foo”,它将获得名为“foo”的文档中所有元素的列表
$xml = file_get_contents('sample');
$dom = new DOMDocument;
@$dom->loadHTML($xml);
$resources= $dom->getElementsByTagName('foo');
foreach ($resources as $resource){
echo $resource->nodeValue . "\n";
}
<?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();
?>