Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 带有可选条件的XPath查询(仅当标记存在时应用条件)_Xml_Xpath - Fatal编程技术网

Xml 带有可选条件的XPath查询(仅当标记存在时应用条件)

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

我有一个XML文档,我想使用XPath从中提取一些数据。下面是我感兴趣的xml中的一个块:

<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]