如何通过定位特定标签来获取其他标签
在这里,我粘贴了一个标签名称如21A,50F,21D,22B
的XML样本。如何通过定位特定标签来获取其他标签
通常情况下,如果我需要获取特定标签,我可以很容易地在下面在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,',',' '),' ')"/>
<xsl:value-of select="substring(substring-before(substring-after($result,' '),' '),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 A
和Sequence 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个标签,但标签可能是A
或D
,所以我需要盲目地针对50f
标签。无论他们将提供什么标签,要么A
要么是D
之前50F
我需要获取类似无论他们填充标签50F
我们能够获取这样避免职位。
摘要: @Treemonkey:希望你有我的样本XML的一目了然。它有一些标签,如等。假设如果我有两个字段field1,field2
较早他们已经填充标记为相同的重复标记为21A
当时我已旁通过标记位置[1]字段1(tag[name = '21A'][1]
)
同样21A
通过标记具有旁取为具有21A
现在它们将填充21
,但标签与A
或D
不同。正如我刚才所说field1
应该集中sequence A
和field2
应该集中精力为sequence B
所以现在我们不应该操心的获取,我们有一个像标签50F
分界任何字段将50F
之前填充有视为sequence A
后50F
必须被视为位置sequence B
。
所以最后,我们需要通过瞄准50
F.写的XSLT如果我想显示(示例XML)的50F
之前,所以我们需要前50F
标签的制作写XSLT逻辑的选择标记21A
21A
场数据在字段1和字段2中,我们需要在50F
之后作为21D
获取,所以我们需要在50F
之后编写一个逻辑作为选择21D
。
您的要求不完全清楚,但下面的表达式应该有所帮助。
选择tag
之前的所有兄弟姐妹,其子name
具有特定值:
/*/*/*/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']
@_pravz:应该是什么变换的结果?请提供。 –
@pravs可能需要改写你的问题,这很难理解! – Treemonkey