2

SelectNodes-MethodとXPathNavigator-Classを使用して、XmlDocument-Objectからいくつかのノードを読み取りたい。

しかし、C#はこれを評価できません(XMLSpyで検証済み)XPath-Expressen:

//LogicUnit[exists(Level[@val = 'R'])]/LogicLines[exists(LogicLine/DATAVIEW_SRC)]

ランタイムは、XPAthException " Namespace ManagerまたはXsltContextが必要です。このクエリにはプレフィックス、変数、またはユーザー定義関数があります。 "をスローします。

XML-Documentは名前空間を使用せず、XSLT-Documentも存在しないため、この例外を理解していません。XPATH関数を使用している場合、この例外は常に表示されます。

4

3 に答える 3

4

XPath関数exists()はXPath 2.0で定義されていますが、.NETのデフォルトのMicrosoftXPathエンジンはXPath1.0のみをサポートしています。.NETで実行されるXPath2.0エンジンが必要な場合は、SaxonまたはXQSharpを試してください。

于 2011-10-20T09:51:50.027 に答える
1

// LogicUnit [count(Level [@val ='R'])>0]を使用します。

于 2011-10-20T08:59:27.813 に答える
1

その理由は、名前空間マネージャーなしでは関数を使用できないためですが、関数を使用する必要はなく、コードはその関数を間違った方法で使用しています。何かが存在するかどうかを確認するために関数exists()は必要ありません。

//LogicUnit[exists(Level[@val = 'R'])]

あなたが意味するところ

//LogicUnit[Level[@val = 'R']]
于 2011-10-20T09:01:22.513 に答える