XPath:轴跟随兄弟不够准确

时间:2018-11-15 15:36:55

标签: xpath

我使用标准XPath 2.0版轴在EDIFACT消息(错误)中浏览,该消息封装在XML消息中。以下是简短摘录:

<Loop type="RFF">
    <RepeatingSegment type="RFF">
        <Segment type="RFF" name="REFERENCE">
            <Element type="1153" name="Reference qualifier" value="Order number (purchase)">ON</Element>
            <Element type="1154" name="Reference number">0104772302</Element>
        </Segment>
        <Segment type="RFF" name="REFERENCE">
            <Element type="1153" name="Reference qualifier" value="Delivery note number">DQ</Element>
            <Element type="1154" name="Reference number">052620228</Element>
        </Segment>
    </RepeatingSegment>
    <RepeatingSegment type="DTM">
        <Segment type="DTM" name="DATE/TIME/PERIOD">
            <Element type="2005" name="Date/time/period qualifier" value="Reference date/time">171</Element>
            <Element type="2380" name="Date/time/period">20180207</Element>
            <Element type="2379" name="Date/time/period format qualifier" value="CCYYMMDD">102</Element>
        </Segment>
    </RepeatingSegment>
</Loop>

标准的XPath斧头“跟随兄弟”,甚至用[1]强制,都会返回第一个参考(RFF)的唯一日期(DTM),但是此日期属于第二个参考(RFF)…

/Loop[@type='RFF']/RepeatingSegment[@type='RFF']/Segment[@type='RFF']/Element[@type=1153 and text()='ON']/../../following-sibling::RepeatingSegment[@type='DTM'][1]/Segment[@type='DTM']/Element[@type=2380]

返回“ 20180207”。因此,我正在寻找一种可以返回“暹罗”日期的窍门(如果上面的摘录中没有该日期,则不返回)。

“暹罗语”一词不清楚:我现在使用的是“情侣”一词。理想情况下,如果XML消息完成了,则它们应该是两对Reference-Date,不幸的是应该放在不同的RepeatingSegment组中(这就是为什么我首先提到EDIFACT消息被旧系统错误地封装)的原因。

当每个参考都有两个不同的日期时,如下面的第二部分摘录,可以使用后继斧头在每个参考之后选择它们:

<Loop type="RFF">
    <RepeatingSegment type="RFF">
        <Segment name="REFERENCE" type="RFF">
            <Element name="Reference qualifier" type="1153" value="Order number (purchase)">ON</Element>
            <Element name="Reference number" type="1154">0CDE922802</Element>
        </Segment>
    </RepeatingSegment>
    <RepeatingSegment type="DTM">
        <Segment name="DATE/TIME/PERIOD" type="DTM">
            <Element name="Date/time/period qualifier" type="2005" value="Reference date/time">171</Element>
            <Element name="Date/time/period" type="2380">20170619</Element>
            <Element name="Date/time/period format qualifier" type="2379" value="CCYYMMDD">102</Element>
        </Segment>
    </RepeatingSegment>
    <RepeatingSegment type="RFF">
        <Segment name="REFERENCE" type="RFF">
            <Element name="Reference qualifier" type="1153" value="Delivery note number">DQ</Element>
            <Element name="Reference number" type="1154">00000004</Element>
        </Segment>
    </RepeatingSegment>
    <RepeatingSegment type="DTM">
        <Segment name="DATE/TIME/PERIOD" type="DTM">
            <Element name="Date/time/period qualifier" type="2005" value="Reference date/time">171</Element>
            <Element name="Date/time/period" type="2380">20180726</Element>
            <Element name="Date/time/period format qualifier" type="2379" value="CCYYMMDD">102</Element>
        </Segment>
    </RepeatingSegment>
</Loop>

但是当缺少第一个日期时,如上面的第一个摘录中所述,后继同位斧头选择第二个引用的日期(因为第一个日期丢失,所以它是第一个出现的Date)。所以,是的,上面的XPath表达式可以正常工作。

这就是为什么我要寻找另一个XPath表达式,它不返回任何内容(空字符串),而不是后面的第一个“坏”日期。实际上,XPath中尚不存在的一种“跟随同级”斧头应该很有用。

0 个答案:

没有答案