如何在XML中首次出现

时间:2018-01-10 00:12:35

标签: xml xslt foreach break

我有XML数据,其结构如下所示。我只需要获取CX.1CX.5的第一个<PID.3.LST> <PID.3> <CX.1>432</CX.1> <CX.4>BH</CX.4> <CX.5>TN</CX.5> <CX.6>BH</CX.6> </PID.3> <PID.3> <CX.1>444</CX.1> <CX.4>BH</CX.4> <CX.5>TN</CX.5> <CX.6>BH</CX.6> </PID.3> <PID.3> <CX.1>8415</CX.1> <CX.4>SWH</CX.4> <CX.5>MR</CX.5> <CX.6>SWH</CX.6> </PID.3> <PID.3> <CX.1>915252936 </CX.1> <CX.2>9</CX.2> <CX.4>AUSHIC</CX.4> <CX.5>MC</CX.5> </PID.3> </PID.3.LST> 值,以及&#39; TN&#39;

CX.1

我只想加载CX.5值包含的CX.1值&#39; TN&#39;。

这是我正在使用的XSLT代码,但它会返回所有<xsl:variable name="UR" select="CX.5"/> <xsl:if test="substring($UR,1,2)='TN'"> My ID: <xsl:variable name="URsub" select="substring-after('TN',$UR)"/> <xsl:value-of select="CX.1"/> </xsl:if> 值。

0\/\3\0

换句话说,我需要在XSLT中打破我的for-each

2 个答案:

答案 0 :(得分:2)

  

我只需要获取第一个CX.1值,CX.5值以&#39; TN&#39;

开头

表示您正在寻找的匹配是

//CX.1[starts-with(../CX.5,'TN')][1]

在整个模板中,这看起来像这样:

<xsl:template match="/">
  <xsl:value-of select="//CX.1[starts-with(../CX.5,'TN')][1]" />
</xsl:template>

答案 1 :(得分:1)

此XPath将选择第一个CX.1元素,其兄弟CX.5元素包含“TN”:

(/PID.3.LST/PID.3[contains(CX.5,"TN")]/CX.1)[1]