2014-02-25 26 views
0

如何获取下一个xml标签的名称?下一个xml标签的名称

<SUBSCRIBER> 
    <Anumber>639093700012</Anumber> 
    <FirstCallDate>20090612124207</FirstCallDate> 
    <SetyCode>TNT</SetyCode> 
    <PARSETAG>parseind</PARSETAG> 
    <Status>ACT</Status> 
    <RoamIndicator>1</RoamIndicator> 
    <PreloadCode>P1.0</PreloadCode> 
</SUBSCRIBER> 

以下代码开始从标记PARSETAG解析并打印下一个xml标记值。我将如何获得下一个XML标签名称?

例如,下面的代码打印ACT,1,P1.0标签值,但我也需要各自的标签名称。

<xsl:template match="SUBSCRIBER/*" mode="RULE_DA_TEST"> 
     <xsl:if test="preceding-sibling::PARSETAG"> 
        <!-- some logic here --> 
     <xsl:variable name="tagname" select="following-sibling::node()[1]"/> 
      <xsl:variable name="tagvalue" select="????????????????"/> 
        <!-- some logic here --> 
     </xsl:if> 
    </xsl:template> 
+0

就是答案。纠正我,如果我错了或建议其他(如果有的话)。 – Hari

回答

0

following-sibling::*/name()为您提供了一系列具有以下兄弟元素名称的字符串。

+0

我觉得我的问题有点不清楚。我想将下一个标记名称和它的值保存在变量中进行处理。请看我刚才编辑的问题。 – Hari

+0

我想,我知道了, Hari

+1

如果你正在寻找下一个元素的名字'node然后我会使用'name(following-sibling :: * [1])'作为'(following-sibling :: node()[1]''可以选择一个'text'节点或注释节点。 –

1

您的测试只选择具有PARSETAG作为前面的兄弟(不包括PARSETAG)的节点。所以你的节点是Status,RoamIndicatorPreloadCode。如果您需要来自这三个节点的数据,请不要使用following-sibling来提取您的数据,否则您将排除Status。当上下文节点为Status时,表达式following-sibling:node()将在Status之后选择节点,因此您将只获得RoamIndicatorPreloadCode

所以得到的名字和所有兄弟节点的值PARSETAG后,你应该使用:

<xsl:if test="preceding-sibling::PARSETAG"> 
    <xsl:variable name="tagname" select="name(.)"/> 
    <xsl:variable name="tagvalue" select="."/> 
</xsl:if>