【问题标题】:Transforming XSL stored inside XML转换存储在 XML 中的 XSL
【发布时间】:2017-03-06 18:45:09
【问题描述】:

具有以下 XML

<xsl:element name="input">
    <xsl:attribute name="type">
        <xsl:text>email</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="name">
        <xsl:text>email</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="class">
        <xsl:text>form-control</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="required">
        <xsl:text>true</xsl:text>
    </xsl:attribute>
</xsl:element>

我怎样才能将它完全像这样传递给 XSLT 并具有以下输出:

<input type="email" name="email" class="form-control" required="true"/>

我已经尝试过xsl:copy-ofdisable-output-escaping。但它们似乎都不起作用。甚至有可能实现这一目标吗?

谢谢。

【问题讨论】:

  • 您的输入真的是这样吗?没有命名空间声明将xsl 前缀绑定到命名空间?如果是这样,您将根本无法处理它,因为它不是 XML。
  • 就像许多 XSLT 问题一样,只有一个输入示例是不够的。我们需要知道输入可能与此示例有何不同。例如,它是否可以包含 xsl:element 和 xsl:attribute 以外的指令?

标签: php xml xslt


【解决方案1】:

给定一个格式良好的 XML 输入,例如:

<xsl:element name="input" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:attribute name="type">
        <xsl:text>email</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="name">
        <xsl:text>email</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="class">
        <xsl:text>form-control</xsl:text>
    </xsl:attribute>
    <xsl:attribute name="required">
        <xsl:text>true</xsl:text>
    </xsl:attribute>
</xsl:element>

你可以使用:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="xsl:element">
    <xsl:element name="{@name}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

<xsl:template match="xsl:attribute">
    <xsl:attribute name="{@name}">
        <xsl:apply-templates/>
    </xsl:attribute>
</xsl:template>

</xsl:stylesheet>

返回:

<?xml version="1.0" encoding="UTF-8"?>
<input type="email" name="email" class="form-control" required="true"/>

如您所见,输入是 XSLT 片段这一事实在很大程度上无关紧要。它的唯一区别是您不需要为输入的命名空间定义新前缀。

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 2012-08-12
    相关资源
    最近更新 更多