我有以下
XML:
<A> <B> <C Since="2011-09-26T11:12:41.1383089Z"> <E Name="One" AnotherDate="2011-09-26T10:54:05.7025781Z"/> <E Name="Two" AnotherDate="2011-09-26T11:54:05.7025781Z"/> </C> </B> </A>
我的Xpath表达式如下所示:
//A/B/C/E[@AnotherDate <= ../@Since]
where X.exists(xpathexpression)=1
但不是在带有XmlDocument.SelectNodes()的.NET 3.5中.
据我了解xpath文档,这个查询应该可以在.NET版本中支持的XPATH 1.0中实现.
我想要实现的目标是什么:
我想选择所有具有AnotherDate之前或等于其父元素C的Since属性的元素E.
解决方法
这非常简单.使用:
/A/B/C/E [not(translate(@AnotherDate,'-:TZ','') > translate(../@Since,'') ) ]
基于XSLT的验证:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:copy-of select= "/A/B/C/E [not(translate(@AnotherDate,'') > translate(../@Since,'') ) ] "/> </xsl:template> </xsl:stylesheet>
当此转换应用于提供的XML文档时:
<A> <B> <C Since="2011-09-26T11:12:41.1383089Z"> <E Name="One" AnotherDate="2011-09-26T10:54:05.7025781Z"/> <E Name="Two" AnotherDate="2011-09-26T11:54:05.7025781Z"/> </C> </B> </A>
<E Name="One" AnotherDate="2011-09-26T10:54:05.7025781Z" />
说明:使用标准XPath 1.0函数translate()
从日期时间值中删除所有非数字字符,以便可以将剩余的全数字字符串正确地作为数字进行比较.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。