2011-12-12 78 views
0

在这里,我粘贴了一个标签名称如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,',',' '),'&#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标签。无论他们将提供什么标签,要么A要么是D之前50F我需要获取类似无论他们填充标签50F我们能够获取这样避免职位。


摘要@Treemonkey:希望你有我的样本XML的一目了然。它有一些标签,如等。假设如果我有两个字段field1,field2较早他们已经填充标记为相同的重复标记为21A当时我已旁通过标记位置[1]字段1(tag[name = '21A'][1]

同样21A通过标记具有旁取为具有21A现在它们将填充21,但标签与AD不同。正如我刚才所说field1应该集中sequence Afield2应该集中精力为sequence B所以现在我们不应该操心的获取,我们有一个像标签50F分界任何字段将50F之前填充有视为sequence A50F必须被视为位置sequence B

所以最后,我们需要通过瞄准50 F.写的XSLT如果我想显示(示例XML)的50F之前,所以我们需要前50F标签的制作写XSLT逻辑的选择标记21A21A场数据在字段1和字段2中,我们需要在50F之后作为21D获取,所以我们需要在50F之后编写一个逻辑作为选择21D

+0

@_pravz:应该是什么变换的结果?请提供。 –

+0

@pravs可能需要改写你的问题,这很难理解! – Treemonkey

回答

0

您的要求不完全清楚,但下面的表达式应该有所帮助。

选择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'] 
相关问题