我的问题在于将已转换为XML的EDI文件转换为组。它包含动态的消息列表,因此更多的UNH标签包含以下BGM标签和DTM标签。我不是在寻找XSLT样式表的答案
在这种情况下,我可以使用1到35个DTM标签,始终遵循BGM标签
有更多DTM标签跟随其他标签,如PTY,但我只想匹配BGM标签后的任何DTM标签和所有下一个兄弟DTM标签。
我的最终目标是遍历所有细分并将其添加到组中,如http://www.truugo.com/edifact/d96a/orders/中所述,其中UNH-FTX将进入GRP0,以下RFF(强制)-DTM(有条件)进入GRP1等上。
我希望在XPATH 1.0中尽可能少地执行此操作。
提前谢谢!
说明性示例,其中bold =匹配节点。在这种情况下,节点数最多可以连续35个。在其他情况下,我可能必须匹配高达200000
< UNH>
<组>
<值大于1< /值GT;
< /组>
< / UNH>
< BGM>
...
< BGM>
的< DTM>
...
< / DTM>
< DTM>
...
< / DTM>
< PAI>
...
< / PAI>
< DTM>
...
< / DTM>
< PTY>
...
< / PTY>
...
< UNH>
...
< / UNH>
< BGM>
...
< BGM>
的< DTM>
...
< / DTM>
< DTM>
...
< / DTM>
< DTM>
...
< / DTM>
< DTM>
...
< / DTM>
< IMD>
...
< / IMD>
< DTM>
...
< / DTM>
< DTM>
...
< / DTM>
< PTY>
...
< / PTY>
答案 0 :(得分:0)
这确实是违反直觉的,但这里是如何通过使用兄弟运算符进行过滤来解决集合:
第一个BGM之后的第一组DTM
//DTM [ (preceding-sibling::*)[name()!="DTM"][last()]
= //BGM[1] ]
第二个BGM集上IMD之后的两个DTM:
//DTM [ (preceding-sibling::*)[name()!="DTM"][last()]
= //BGM[2]/following-sibling::IMD[1] ]