在C#.NET 3.5中使用XPath比较不同层次结构级别的两个属性
发布时间:2020-12-15 21:24:23 所属栏目:百科 来源:网络整理
导读:我有以下 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 = ../@Sinc
我有以下
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] 这适用于XMLSpy,也适用于T-SQL 2008查询 where X.exists(xpathexpression)=1 但不是在带有XmlDocument.SelectNodes()的.NET 3.5中. 据我了解xpath文档,这个查询应该可以在.NET版本中支持的XPATH 1.0中实现. 我想要实现的目标是什么: 那么:我做错了什么,或者我可以改变什么来实现类似的东西. 解决方法
这非常简单.使用:
/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函数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |