0

次の構造を持つ XmlDocument オブジェクトがあります。

<ROOT>
<MESSAGE>
 <some_fields />
 <myDate>
 <myParameter>
</MESSAGE>
<MESSAGE>
 ...
</ROOT>

myDate>= 指定された日付および myParameter=指定されたパラメーターであるすべての MESSAGE ノードを取得したいと考えています。つまり、次のようなものです。

MyDoc.SelectNodes("/ROOT/MESSAGE..")

XPathを使用してそれを行うことは可能ですか?

=================

わかった。myDate には既に xs:dateTime 型があります。しかし今、私は次の例外があります:

//MESSAGE[myDate < xs:dateTime(2012-06-22T11:17:44)]' の修飾名が無効です。

コードは次のとおりです。

 XmlNodeList nodeList = MyXmlDocument.SelectNodes("//MESSAGE[myDate < xs:dateTime(" + givenDateTime + ")]");

そして、それはでも動作しません

"//MESSAGE[xs:dateTime('2012-06-22T11:47:32')=xs:dateTime('2012-06-22T11:47:32')]"

次に、System.Xml.XPath.XPathException があります。

Namespace Manager または XsltContext が必要です。このクエリには、プレフィックス、変数、またはユーザー定義関数があります。

4

3 に答える 3

2

純粋に XPATH で実行できます。

MyDoc.SelectNodes("//MESSAGE[xs:date(./myDate@text()) > xs:date('given date') and myParameter[text()='given parameter']]")

[未テスト]

于 2012-06-21T12:33:10.067 に答える
1

はい、その可能性は大いにあります。必要なすべてのオペレーターを入手できる次のリンクを参照してください。

http://msdn.microsoft.com/en-us/library/aa226440(v=sql.80).aspx

http://www.javabeat.net/2009/03/how-to-query-xml-using-xpath/

于 2012-06-21T12:19:20.323 に答える
1

LINQ の使用をお勧めします。

あなたは次のようなものを持つことができます

var nodes = from node in XDoc.Root.Elements("MESSAGE")
            where (DateTime)node.Element("myDate") >= DateTime.Now
            select node;

これにより、myDate 時刻が現在の DateTime または将来のノード要素が選択されます。LINQ を使用した XML 解析をさらに詳しく調べることができます。XML 解析の好ましい方法であることがわかりました。

あなたのための別の例:

var nodes = from node in XDoc.Root.Elements("MESSAGE")
                where (DateTime)node.Element("myDate") >= DateTime.Now
                && node.Element("myParameter").Value == "whatever"
                select node;
于 2012-06-21T12:17:31.633 に答える