如果首选值为n

时间:2018-01-25 12:52:06

标签: xml xpath xpath-1.0

我有一个复杂的"通常"如何根据XPATH条件返回字符串值的问题。

我之前成功使用过以下解决方案: Return a string value based on XPATH conditionNested conditional if else statements in xpath

但现在我的XML是:

<Events xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <EventDetails>
    <AccountingDate>2017-01-01</AccountingDate>
    <PaymentDate>2017-01-31</PaymentDate>
  </EventDetails>
  <EventDetails>
    <AccountingDate>2017-01-01</AccountingDate>
    <PaymentDate xsi:nil="true"/>
  </EventDetails>
</Events>

我需要提取PaymentDate,如果它有一个值,否则替换AccountingDate,即2017-01-31替换第一个事件,但2017-01-01替换第二个。

问题是我强制使用的解析器是XPath 1.0并且不识别nilled函数,如果PaymentDate为nil,则boolean(PaymentDate)为真。

我希望有人有一个好主意,因为我完全难过。

2 个答案:

答案 0 :(得分:0)

最后在大约4个小时后解决了......

var counter = 0;

$("#button").click(function() {
    $(".slick").last().after("<div class='box'></div><div class='slick'></div>")
});

// With on():

$(".slick").on("click", function() {
    $('<style>.box { background-color: blue !important; }</style>').appendTo('head'); 
});

(它也适用于PaymentDate根本不存在的可能性,尽管在我的情况下它总是存在。)

现在我只需要让它与三个可能的日期一起工作!

答案 1 :(得分:0)

您也可以尝试此过滤

EventDetails[PaymentDate != '']/PaymentDate | EventDetails[PaymentDate = '']/AccountingDate

或实际水平

PaymentDate[. != ''] | AccountingDate[../PaymentDate = '']

或者,如果在PaymentDate缺失和xml数据顺序修复时工作很重要

PaymentDate[. != ''] | AccountingDate[not(following-sibling::PaymentDate) or following-sibling::PaymentDate = '']