我无法在XSLT中获得所需的值

时间:2014-09-01 10:19:11

标签: xslt

这是输入:

  <Data>
   <A_ID>123456789</A_ID>
   <A_Code>ojhgf</A_Code>
       <A_Rec>
         <inner1>2345</inner1>
        <inner2>14April</inner2>
         <inner3>15November</inner3>
      </A_Rec>
   </Data>

这是我的XSLT:

  <xsl:variable name="AID" select="A_ID" />
  <xsl:variable name="ACode" select="A_Code" />
  <xsl:for-each xmlns:sch="http://schemas.w3.com/" select="//A_Rec">
        <sch:COMPANY>
             <xsl:value-of select="$AID" />
        </sch:COMPANY>
        <sch:COMPANY_CODE>
            <xsl:value-of select="$ACode" />
        </sch:COMPANY_CODE>
   </xsl:for-each>

我想在下面提到的行中获得值“123456789”。 $ AID应该保持123456789,但我在for-each循环之外获得了所需的值。 但我没有在公司和公司代码的for-each循环中获得AID和ACode值。我该怎么办?

3 个答案:

答案 0 :(得分:1)

您应该使用&#34; Data / A_ID&#34;。假设您的上下文节点不是&#34;数据&#34;因为我没有看到别的错误。

答案 1 :(得分:1)

创建后,XSLT变量无法更改其值。 有一个非常好的SO答案here可以帮助您重新设计XSLT。

编辑:Lingamurthy CS已正确识别您的XPath存在问题,但请查看我已链接的SO页面,因为它仍然可能有用。

答案 2 :(得分:1)

您似乎希望在具有不同命名空间的不同节点中输出A_IDA_Code

请改为尝试:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:strip-space elements="*"/>

    <xsl:output indent="yes"/>

    <xsl:template match="/">
        <root xmlns:sch="http://schemas.w3.com/">
            <xsl:apply-templates select="Data/A_ID|Data/A_Code"/>
        </root>
    </xsl:template>

    <xsl:template match="Data/A_ID">
        <xsl:element name="sch:COMPANY" namespace="http://schemas.w3.com/">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="Data/A_Code">
        <xsl:element name="sch:COMPANY_CODE" namespace="http://schemas.w3.com/">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>