【问题标题】:Change Node name of an XSLT based on an include file根据包含文件更改 XSLT 的节点名称
【发布时间】:2013-08-07 10:32:27
【问题描述】:

您好,我有一个需要转换 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> 

现在我需要根据底部的包含文件名将节点名称 Customer 更改为 Supplier 以及另外一件事,我还具有 Document 节点的特定属性,这也取决于包含文件。

谢谢,希望有人能帮帮我。

【问题讨论】:

  • “文档节点的特定属性也取决于包含文件。”这是什么意思?请给我们举个例子。
  • 例如,包含文件的文件名是“Customer.xsl”,那么 Document 标签将具有不同的属性,例如 xlsni=Customer,如果它是“Supplier.xsl”,那么 Document 将具有 xlsni=供应商,文档标签之后的节点也是如此

标签: xml xslt


【解决方案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>

【讨论】:

  • 对不起,我有一个错字.. :)
  • 嗨,我有一个后续问题here 也与此有关。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多