1

XML タグを探す関数があります。

 function extraerTagXML($mensaje, $tagname){


          $dom = new domDocument('1.0', 'UTF-8');
          //
          // load the html into the object ***/
          $dom->loadHTML($mensaje);

          //discard white space
          $dom->preserveWhiteSpace = false;
          $nodeList= $dom->getElementsByTagName("'".$tagname."'"); // here u use your desired tag

          $items = array();
          for($i=0; $i < $nodeList->length; $i++) {
                    $node = $nodeList->item($i);
                    $items[] = trim($node->nodeValue);
          }
          var_dump($items);
         // libxml_clear_errors();

          return $items;

 }

私が実行すると:

    echo $salida;

    $resultado = extraerTagXML($salida,"MSG");

私が得た:

<?xml version='1.0' encoding='UTF-8' ?>
<cod_avis>3000082</cod_avis>
<MSG>ok</MSG> 
</Status>

array(0) {
}

したがって、「MSG」タグは見つかりませんでした。なぜ?

4

1 に答える 1

2

まず、HTML 文書ではなく XML 文書をロードしています。したがって、メソッドloadXML()の代わりに使用してください。 次に、 を呼び出すときにタグ名の周りに明示的に引用符を追加する必要はありません。 loadHTML()
getElementsByTagName()

getElementsByTagName("'".$tagname."'");

使用する

getElementsByTagName($tagname);

また、上記のコメントで述べたように、XML ドキュメントの形式が正しくありません。ルート ノードがありません。次のように編集してください。

<?xml version='1.0' encoding='UTF-8' ?>
<Status>
<cod_avis>3000082</cod_avis>
<MSG>ok</MSG> 
</Status>

そして3番目に、を使用DOMXPathしているため、同じ目的でDOMDocument使用 することもできます。

$xPath = new DOMXPath($dom);
$result = $xPath->query('//MSG');
echo $result->item(0)->nodeValue;

しかし、それは余談です;-)

于 2013-04-23T10:13:59.603 に答える