输出 XSLT 中条件匹配位置之前的一个节点
Posted
技术标签:
【中文标题】输出 XSLT 中条件匹配位置之前的一个节点【英文标题】:Output one node previous to where condition matches in XSLT 【发布时间】:2021-03-08 09:52:35 【问题描述】:我有一个xml格式
<Session>
<Record>
<Y_threshold>85</Y_threshold>
<XYData>
<X>200</X>
<Y>83.5</Y>
</XYData>
<XYData>
<X>224</X>
<Y>84.1</Y>
</XYData>
<XYData>
<X>250</X>
<Y>86.2</Y>
</XYData>
<XYData>
<X>282</X>
<Y>88.3</Y>
</XYData>
<XYData>
<X>315</X>
<Y>90.2</Y>
</XYData>
</Record>
<Record>
<Y_threshold>90</Y_threshold>
<XYData>
<X>200</X>
<Y>88</Y>
</XYData>
<XYData>
<X>224</X>
<Y>88.5</Y>
</XYData>
<XYData>
<X>250</X>
<Y>89.1</Y>
</XYData>
<XYData>
<X>282</X>
<Y>91.7</Y>
</XYData>
<XYData>
<X>315</X>
<Y>94.5</Y>
</XYData>
</Record>
</Session>
对于每条记录,我需要获取满足 Y 大于 Y_threshold 的 FIRST 节点之前的节点的 X 值。
澄清,以防我措辞奇怪
在上面的例子中,满足 Y>Y_threshold 的第一个节点是
Record 1
<X>250</X>
<Y>86.2</Y>
(since 86.2 > 85)
Record 2
<X>282</X>
<Y>91.7</Y>
(since 91.7>90)
所以想要的输出是previous X,即一个节点before条件满足
Record 1
<X>224</X>
Record 2
<X>250</X>
问题:如何使用 XSLT 2.0 或 1.0 做到这一点?
【问题讨论】:
找到第一个满足条件的节点,然后是它的前一个兄弟节点。 是的,但是怎么做?我是xslt的新手,你能拼出来吗?对不起 对不起,我还不能实现它,但谢谢你的回答 【参考方案1】:这是一个在 XPath 中相当简单的练习。从Record
的上下文中,选择:
XYData[Y > ../Y_threshold][1]/preceding-sibling::XYData[1]/X
【讨论】:
以上是关于输出 XSLT 中条件匹配位置之前的一个节点的主要内容,如果未能解决你的问题,请参考以下文章
使用 XSLT 基于 ID 从多个 xPath 中选择 XML 节点