如何将一个xslt文件导入另一个xslt文件



我正在使用xslt 1.0,我想将一个xslt文件导入另一个xslt文件。

下面的

是例子:

A.xml

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

             <header>
                <UserId>
                   <xsl:value-of select="'user1'" />
               </UserId>
               <UserPaassword>
                  <xsl:value-of select="'1234'" />
              </UserPaassword>
             </header>
    </xsl:template>
</xsl:stylesheet>

B.xml

   <?xml version="1.0" encoding="UTF-8"?>
     <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       version="1.0">
         <xsl:template match="/">
             <userData>
                <xsl:import href="A.xsl"/>
                  <body>
                     <UserAddress>
                        <xsl:value-of select="'India'" />
                     </UserAddress>
                     <UserPhoneNumber>
                        <xsl:value-of select="'123456789'" />
                     </UserPhoneNumber>
                  </body>
              </userData>
         </xsl:template>
     </xsl:stylesheet>

,最终输出XSL应该如下所示

输出。xsl

<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   version="1.0">
 <xsl:template match="/">
    <userData>
        <header>
            <UserId>
                <xsl:value-of select="'user1'" />
            </UserId>
            <UserPaassword>
                <xsl:value-of select="'1234'" />
            </UserPaassword>
        </header>
        <body>
            <UserAddress>
                <xsl:value-of select="'India'" />
            </UserAddress>
            <UserPhoneNumber>
                <xsl:value-of select="'123456789'" />
            </UserPhoneNumber>
        </body>
      </userData>
  </xsl:template>

I tried with the import statement but xsl:import is not allowed into xsl:template.

请帮我解决这个问题。

提前谢谢你

你已经回答了自己的问题。xsl:import不允许在xsl:template中,所以您当前尝试的将不起作用。当您使用xsl:import时,XSLT处理器将其替换为在href属性中命名的样式表的内容,因此在您的情况下,您将最终使用这样的XSLT…
    <xsl:template match="/">
         <userData>
              <xsl:template match="/">
                  <header>

还值得指出的是,XSLT处理器实际上不会在这里更改物理文件b.xml,也不会创建新的物理文件output.xsl。此导入仅在处理运行时应用。新的XSLT实际上只存在于内存中。

你还没有确切地说你想达到什么目的。但听起来你需要在这里阅读xsl:apply-imports。导入模板的优先级低于主模板中的模板,因此您可以使用xsl:apply-imports在导入的模板中应用这样的模板。

作为初学者,将B.xml文件更改为如下所示

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:import href="A.xml"/>
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <userData>
      <xsl:apply-imports />
      <body>
        <UserAddress>
          <xsl:value-of select="'India'" />
        </UserAddress>
        <UserPhoneNumber>
          <xsl:value-of select="'123456789'" />
        </UserPhoneNumber>
      </body>
    </userData>
  </xsl:template>
</xsl:stylesheet>

因此,当在示例中使用xsl:apply-imports时,它实际上会匹配导入的a.xml文件中的主模板。

详细信息见http://www.w3.org/TR/xslt#section-Combining-Stylesheets

相关内容

  • 没有找到相关文章

最新更新