繁体   English   中英

如何通过定位特定标签来获取其他标签

[英]how to fetch the other tags by targeting a particular tag

在这里,我粘贴了一个XML示例,它是标记名称,例如21A,50F,21D,22B

通常,如果需要获取特定标签,可以在XSLT中轻松使用以下逻辑:

<xsl:choose>
    <xsl:when test="tag[name = '21A'] ">
        <xsl:choose>
            <xsl:when test="substring(tag[name = '21A']/value,1,1) = '/'">
                <xsl:variable name="result" select="concat(translate(tag[name = '21A']/value,',',' '),'&#13;')"/>
                <xsl:value-of select="substring(substring-before(substring-after($result,'&#13;'),'&#13;'),1,11)"/>
            </xsl:when>
            <xsl:when test="substring(tag[name = '21A']/value,1,1) != '/'">
                <xsl:value-of select="substring(tag[name = '21A']/value,1,11)"/>
            </xsl:when>
        </xsl:choose>
    </xsl:when>
</xsl:choose>

但在这里我有一个要求,即Sequence ASequence B

  • 高于50F的标签位于sequence A
  • 填充在50F以下的标签位于sequence B

因为我们需要基于使用50F标签来获取标签。 有人可以提出建议吗?

<local>
    <message>
        <block4>
            <tag>
                <name>21A</name>
                <value>ALW1031</value>
            </tag>
            <tag>
                <name>50F</name>
                <value>TESTING CITI BANK EFT9</value>
            </tag>
            <tag>
                <name>21D</name>
                <value>OUR</value>
            </tag>
            <tag>
                <name>22B</name>
                <value>ipubby</value>
            </tag>
        </block4>
    </message>
</local>

需要的输出:

ALW1031,OUR

以前,假设它们两次填充了21A ,则意味着在调用标记值时,我将位置用作[1]和[2]。 现在它们将重复填充21个标签,但是标签可能是AD因此我需要盲目地定位50f标签。 无论他们提供的标签是什么,无论是50F之前的A还是D ,我都需要类似地获取,只要它们能够填充50F之后的标签,我们就可以获取,因此请避免放置位置。


摘要@Treemonkey :希望您对我的示例XML有所了解。 它具有一些标签,例如21A,50F等。 假设我之前有两个字段field1,field2 ,它们填充的标签与21A相同,是重复的标签,那时我通过标记字段1的位置[1]提取了21A旁边的tag[name = '21A'][1]tag[name = '21A'][1]

类似地, 21A在旁边通过标记字段2的位置[2]来进行填充,现在它们将填充21但标签却不同为AD 正如我已经说过的, field1应该集中sequence Afield2应该集中为sequence B所以现在我们不应该为获取位置而烦恼,我们有一个类似标签50F无论在50F必须被视为sequence A和之后50F必须被视为sequence B

因此,最后我们需要针对50 F编写XSLT。如果我想在50F之前在(样本XML)中显示21A字段,那么我们需要在XSLT中写逻辑作为选择标签21A50F之前生成字段1中的数据和场2,我们需要为获取21D50F ,所以我们需要写一个逻辑选择21D50F

您的要求不是很清楚,但是以下表达式应该有所帮助。

选择其子name具有特定值的tag之前的所有同级:

/*/*/*/tag[name='50F']/preceding-sibling::*

选择以下同级:

/*/*/*/tag[name='50F']/following-sibling::*

只选择前一个元素:

/*/*/*/tag[name='50F']/preceding-sibling::*[1]

选择具有特定值的子name先前兄弟姐妹:

/*/*/*/tag[name='50F']/preceding-sibling::*[name='21A']

选择以下具有相同子name同级兄弟:

/*/*/*/tag[name='50F']/following-sibling::*[name='21D']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM