我在检索节点时收到错误信息


i got error message while retrieve nodes

使用此代码时,我得到了以下类型的错误信息:

无法显示XML页面无法使用样式表查看XML输入。请更正错误,然后单击>刷新按钮,或稍后再试。XML文档中只允许有一个顶层元素。错误处理资源<c>text</c><c>stuff</c>

<?php
$string = <<<XML
<a>
  <b>
    <c>text</c>
    <c>stuff</c>
  </b>
  <d>
    <c>code</c>
  </d>
</a>
XML;    
$xml = new SimpleXMLElement($string);
echo $xml->asXML();
$result = $xml->xpath('/a/b/c');
foreach ($result as $id => $child) {
    echo "<c>".(string)$child."</c>";
}

检查您输出的XML源,您的XML缺少文档元素并进行转义。

更好的方法是使用DOM复制节点:

<?php
$string = <<<XML
<a><b><c>text</c><c>stuff</c></b><d><c>code</c></d></a>
XML;
// load source XML and create Xpath instance
$source = new DOMDocument();
$source->loadxml($string);
$xpath = new DOMXpath($source);
// create target document with document element
$target = new DOMDocument();
$root = $target->appendChild($target->createElement('e'));
// copy nodes from source to target
foreach ($xpath->evaluate('/a/b/c') as $child) {
  $root->appendChild($target->importNode($child));
}
// output target
echo $target->saveXml();

演示:https://eval.in/161474

下面的代码…我需要检索特定的节点,它的代码意味着我想做的事情。

<?php
    $string = <<<XML
    <a>
    <b>
    <c>text</c>
    <c>stuff</c>
    </b>
    <b>
    <c>code</c>
    </b>
    <d>
    <c>item</c>
    </d>
    </a>
    XML;
    $xml = new SimpleXMLElement($string);
     $xml->asXML()."<br>";
       // echo "<c>".(string)$child."</c>";
        foreach( $xml->children() AS $child )
    {
        //run any query you want on the children.. they are also nodes.
       $name1 = $child;
        //echo "<pre><c></pre>".$name1."<pre><c></pre><br>";
        foreach( $name1->children() AS $child1 )
        {
            $name2 = $child1->getName();
            $child2=$child1;
            // echo $name2."--".$child2;
            echo "&lt;".$name2."&gt;".$child2."&lt;&frasl;".$name2."&gt;"."<br>";
        }
    }
    ?>