6

私はまだSimpleXmlにかなり慣れていません。私がやろうとしていること:

私は多くのxmlファイルを持っていますが、それらはほぼ同じように構築されています。私の問題は、ターゲット ノードにさらに多くのノードが存在する場合があることです。例 (ボディを取得しようとしている):

xml ファイル 1

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<firstname>My name is WHAT</firstname>
<lastname>My name is WHO</lastname>
<body>My name is CHIKA CHIKA Slim-Shady</body>
</note>

xml ファイル 2

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<firstname>My name is WHAT</firstname>
<lastname>My name is WHO</lastname>
<body><b>My name is CHIKA CHIKA Slim-Shady</b></body>
</note>

問題なく最初のファイルのテキストを取得できます。

$xml = simplexml_load_file("filename.xml");
echo $xml->note->body;

しかし、2番目のファイルで同じことをしようとすると、何も返されません。

ターゲットノード内の追加ノードに関係なく、ノード内のテキストのみを吐き出すようにphpを取得するにはどうすればよいですか?

4

3 に答える 3

14

トラバーサルのために

echo $xml->note->body;

機能するには、マークアップが

<note>
    <note>
        <body>
        …

このようなエラーを回避するにsimplexml_load_fileは、マークアップのルート要素の後に変数の名前を付けることをお勧めします。

$note = simplexml_load_string($xml);

SimpleXmlElement の「innerText」を取得するには、次のようにします。

echo strip_tags($note->body->asXml());

asXML()メソッドは「outerXML」を提供し、それを で削除しますstrip_tags

別の方法は、ノードをDOMにインポートしてから取得することですnodeValue

echo dom_import_simplexml($note->body)->nodeValue;
于 2012-10-10T14:53:43.740 に答える
0

追加する必要はありませnote

最初の1つ

echo $xml->body;

二つ目

echo $xml->body->b ;

出力

My name is CHIKA CHIKA Slim-Shady
于 2012-10-10T14:21:36.590 に答える