基于包含文件的XSLT的变化节点名(Change Node name of an XSLT base

2019-10-18 10:56发布

您好我有哪些需要改造一个XML文件中的XSLT文件。

示例XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <Document>
      <Customer>
        <Header>
          <Message>
            <xsl:value-of select="//Header/Message"/>
          </Message>
       </Header>
     </Customer>
    </Document>
  </xsl:Template>
  <xsl:include href="Inc1.xsl" />
</xsl:stylesheet> 

现在,我需要的是取决于底部的包括文件名,一件事节点名客户更改为供应商,我对文档节点的特定属性也取决于包括文件。

感谢,并希望有人能帮助我。

Answer 1:

唯一可行的机制是具有包括的样式表处理特定元素名称和<文档>属性:像这样:

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

    <xsl:template match="/">
        <Document>
            <xsl:call-template name="apply-document-attributes" />
            <xsl:element name="{$customer-element-name}">
                <Header>
                    <Message>
                        <xsl:value-of select="//Header/Message" />
                    </Message>
                </Header>
            </xsl:element>
        </Document>
    </xsl:template>

    <xsl:include href="Inc1.xsl" />

</xsl:stylesheet> 

与包括样式表:

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

    <xsl:variable name="customer-element-name" select="'Supplier'"/>

    <xsl:template name="apply-document-attributes">
        <xsl:attribute name="foo">bar</xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

要么,

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="customer-element-name" select="'Customer'"/>

    <xsl:template name="apply-document-attributes"/>
</xsl:stylesheet>


文章来源: Change Node name of an XSLT based on an include file
标签: xml xslt