我正在尝试在XmlDocument中进行字符串比较,以下是我尝试过的。我想知道为什么前2个产生正确的结果,最后2个没有返回任何结果。
我想要做的是根据日期时间字符串过滤掉节点。就像我上一个例子一样。
感谢,
XmlNodeList test = x2PathDoc.SelectNodes("//config
/pendingversion
[@versionconfigid > 1002002]");
XmlNodeList test2 = x2PathDoc.SelectNodes("//config
/pendingversion
[@versionconfigid >'1002002']");
XmlNodeList test3 = x2PathDoc.SelectNodes("//config
/pendingversion[@test > 'b']");
XmlNodeList test4 = x2PathDoc.SelectNodes("//config
/pendingversion
[@deploydatetime >
'2010-12-19T03:25:00-08:00']");
答案 0 :(得分:5)
在XPath 1.0中,除了相等比较之外的比较运算符,仅适用于数字。这是因为在XML中你正在处理UNICODE。因此,为了使字符串成为完整的有序数据类型,您需要在XPath 2.0中添加它的归类概念。
第一个表达方式是正确的。为什么第二个有效?因为“大于”运算符使用number()
函数转换了两个参数。
来自http://www.w3.org/TR/xpath/#booleans
首先,涉及的比较 节点集是根据 比较不涉及 节点集;这是统一定义的 for =,!=,< =,<,> =和>。
在描述节点集的存在性比较之后(只有在节点集中存在节点且比较为真时才进行比较):
当没有要比较的对象时 节点集,运算符为
<=
,<
,>=
或>
,然后通过将两个对象转换为数字来比较对象 并根据比较数字 IEEE 754