-3

重複の可能性:
xml ファイルのノードとノードの値を CRUD する単純なプログラム
XPath と PHP: 何も正しく動作しない

$XML = <<<XML
<items>
    <item id="123">
        <name>Item 1</name>
    </item>
    <item id="456">
        <name>Item 2</name>
    </item>
    <item id="789">
        <name>Item 3</name>
    </item>
</items>
XML;

$objSimpleXML = new SimpleXMLElement($XML);

echo $objSimpleXML->item[2]->name; // output: Item 3 (OK)
echo '<br><pre>';
print_r($objSimpleXML->xpath('./item[1]/name')); // output: empty Array!!!

こんにちは!純粋なxpathクエリを使用して「アイテム3」を出力として取得するには? (私の提案は空の配列を出力します。)

4

1 に答える 1

1

これは、最もよく知られている 0 ベースの配列とは対照的に、 xpath コレクションのインデックスが 1 ベースであるためです。

xpath 関数は array を返すためItem 3、純粋な xpath クエリを使用することはできません。最初に結果を保存し、配列インデックスを使用して要素にアクセスする必要があります。

$item = $objSimpleXML->xpath('./item[3]/name');
$str = $item[0];

W3C のXPATH 1.0 仕様から、これらは述語と呼ばれます

軸は、前進軸または後退軸のいずれかです。ドキュメント順でコンテキスト ノードの後に​​あるコンテキスト ノードのみを含む軸は、前方軸です。ドキュメント順でコンテキスト ノードの前にあるコンテキスト ノードのみを含む軸は、逆軸です。したがって、祖先、祖先または自己、先行、および先行兄弟の軸は逆の軸です。他のすべての軸は前進軸です。セルフ軸には常に最大 1 つのノードが含まれるため、順方向軸でも逆方向軸でも違いはありません。軸に対するノードセットのメンバーの近接位置は、軸が順方向の軸である場合はドキュメント順で並べられ、軸が逆方向の場合はドキュメント順で並べられたノードセット内のノードの位置であると定義されます。逆軸です。最初の位置は 1.

于 2013-01-12T10:31:49.243 に答える