5

なぜこれが機能しないのか、誰かが説明してくれますか?

私は実行しています

XmlNode xmlNode = xmlDocument.SelectSingleNode("//(artist|author)");

そして私は得る

System.Xml.XPath.XPathException: 式はノード セットに評価される必要があります。

しかし、これは機能し、多くのアーティストノードがある場合でも例外は発生しません

XmlNode xmlNode = xmlDocument.SelectSingleNode("//artist");
4

2 に答える 2

9

私の知る限り、「|」を使用できます XPath クエリの最上位にあるので、クエリを試してください。

    "//artist|//author"

さようなら、再帰検索 (//) はあまり高速ではないので、dom ドキュメントが小さいことを確認してください。

アップデート:

仕様で調べました:

3.3 ノードセット

ロケーション パスは式として使用できます。この式は、パスによって選択されたノードのセットを返します。

| | 演算子は、そのオペランドの和集合を計算します。これは、ノード セットでなければなりません。

これは、「|」の左右に何を書いても意味があります。"|" は、単独で xpath クエリとして使用できる必要があります。次に、それからユニオンを作成します。

具体的には、「(作者と呼ばれるものまたはアーティストと呼ばれるもの)を再帰的に検索する」とは言えません。「作者と呼ばれるもの」はxpath-query(ノードセット)の結果に評価されないためです。

于 2009-03-10T17:21:26.550 に答える
0
  1. //artist|//authorXPATH 1.0 および 2.0 で動作します
  2. //(artist|author)XPATH 2.0 で動作します

マイクロソフトは怠惰な企業です。彼らのフレームワークは XPATH 1.0 のみをサポートしています

于 2009-12-02T10:35:03.760 に答える