Xml 带有可选条件的XPath查询(仅当标记存在时应用条件)
我有一个XML文档,我想使用XPath从中提取一些数据。下面是我感兴趣的xml中的一个块:Xml 带有可选条件的XPath查询(仅当标记存在时应用条件),xml,xpath,Xml,Xpath,我有一个XML文档,我想使用XPath从中提取一些数据。下面是我感兴趣的xml中的一个块: <SalesPrice ElementId="719304324"> <CountryCodeA2>DE</CountryCodeA2> <CurrencyISOCode>EUR</CurrencyISOCode> <ValidFrom>2016-10-21T09:39:16.000+02:00</Val
<SalesPrice ElementId="719304324">
<CountryCodeA2>DE</CountryCodeA2>
<CurrencyISOCode>EUR</CurrencyISOCode>
<ValidFrom>2016-10-21T09:39:16.000+02:00</ValidFrom>
<CancelDate>2016-10-25T09:39:16.000+02:00</CancelDate>
<Amount>3595</Amount>
</SalesPrice>
判定元件
欧元
2016-10-21T09:39:16.000+02:00
2016-10-25T09:39:16.000+02:00
3595
我正在尝试获取所有基于其
和
值有效的
节点。但是,问题是并非所有的
节点都有
标记,我下面的查询不起作用:
/SalesPrice[ValidFrom > 2016-10-23T11:15:50+00:00 and CancelDate < 2016-10-23T11:15:50+00:00]
/SalesPrice[有效期自2016-10-23T11:15:50+00:00,取消日期<2016-10-23T11:15:50+00:00]
那么,哪种查询方法可以获得所有SalesPrices,即使其取消日期丢失?假设以下XML:
<root>
<a>
<b>1</b>
</a>
<a/>
</root>
谢谢这正是我想要的。我现在有另一个问题,当我试图比较日期。。。您知道在XPath查询中比较日期的最佳方法是什么吗?@ArminSam哪个版本的XPath?(另请参见)XPath版本1。0@ArminSam也许您的XPath实现支持某种扩展机制,您可以使用这种机制,但是如果您使用XPath 1.0,恐怕就太倒霉了。XPath 2.0是您需要的。@MichaelKay问题中的XML片段包含ISO时间戳。使用XPath 1.0正确比较它们(包括正确处理时区)并不是通过字符串操作就能轻松完成的。
//a[not(b) or b = 1]