0

PHPのsimplexml_load_stringを使用して、名前空間を含むXMLファイルを解析しようとしています。xml応答のサンプルはここにあります:http://pastie.org/4404714

通常、simplexml_load_stringコマンドを使用してこれを解析し、結果をダンプして、オブジェクトにアクセスできるように読みやすいツリーを取得します。ただし、この場合、これを行うと、すべてのデータが表示されるわけではありません。AttributeSetsの下のセグメントはまったく表示されません。それらを見るためにも生のxmlを出力する必要があります。

タグの名前空間部分を無視するだけでよいという他の同様のstackoverflowの回答を読みましたが、それも機能させることができません。誰か助けてくれませんか。たとえば、この応答からAuthor、Height、またはEditionをどのように印刷しますか。ありがとう

4

2 に答える 2

0

たぶん、ここSOに関するこの質問はあなたを助けるでしょう。

基本的に答えが示唆するのは、使用する各simpleXMLElementオブジェクトの名前空間を登録する必要があるということです。

リンクされた質問からの例:

$xml = new SimpleXMLElement($r);
$xml->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event');

foreach($xml->xpath('//e:event') as $event) {
    $event->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event');
    var_export($event->xpath('//e:sessionKey'));
}

または、別の解決策で説明されているように、xpathクエリでregisterXPathNamespaceと完全な名前空間プレフィックスがなくても機能します。

$xml = new SimpleXMLElement($r);

foreach($xml->xpath('//event:event') as $event) {
    var_export($event->xpath('event:sessionKey'));
}
于 2012-08-07T09:22:12.707 に答える
0

多くの調査の結果、私は2つの解決方法を見つけました。1つは正しい方法であり、もう1つは迅速で汚い方法です。 これは正しい方法でそれを行う方法を説明するサイトです。PHPを使用して文字列を解析し、simple_xml_load_stringそのページの例のように、異なる名前空間を含むオブジェクトの子を取得することができました。それは苦痛でしたが、実行可能でした。

最後に、単純で迅速なソリューションが必要だったので、生のXMLデータを取得して実行しstr_replace('ns2:','',$rawxml)、それをで解析するとsimple_xml_load_string、魅力のように機能します。私はただ$call->it->like->this

このソリューションを気に入らない人もいますが、名前空間はフィールドの重複を避けるために使用されます。データの解析と使用の方法の性質上、これは私にとって問題にはなりません。

于 2012-08-07T21:57:59.473 に答える