
[英]Can we just keep particular tags inside a parent tag and delete all other tags in xslt1.0?
[英]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,',',' '),' ')"/>
<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
标签。 无论他们提供的标签是什么,无论是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
但标签却不同为A
或D
正如我已经说过的, field1
应该集中sequence A
, field2
应该集中为sequence B
所以现在我们不应该为获取位置而烦恼,我们有一个类似标签50F
无论在50F
必须被视为sequence A
和之后50F
必须被视为sequence B
因此,最后我们需要针对50
F编写XSLT。如果我想在50F
之前在(样本XML)中显示21A
字段,那么我们需要在XSLT中写逻辑作为选择标签21A
在50F
之前生成字段1中的数据和场2,我们需要为获取21D
后50F
,所以我们需要写一个逻辑选择21D
后50F
。
您的要求不是很清楚,但是以下表达式应该有所帮助。
选择其子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.