[英]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.