繁体   English   中英

C#:使用XPath获取所需的节点

[英]C#: Get needed nodes using XPath

我有具有下一个结构的XmlDocument对象:

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

我想获取myDate> =给定日期和myParameter = given参数的所有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:

需要名称空间管理器或XsltContext。 该查询具有前缀,变量或用户定义的函数。

可以完全在XPATH中完成:

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

[未测试]

我建议使用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;

是的,这很有可能。 请通过以下链接获取您需要的所有操作员。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM