转换存储在XML中的XSL

时间:2017-03-06 18:45:09

标签: php xml xslt

拥有以下 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。但它们似乎都不起作用。甚至有可能实现这一目标吗?

感谢。

1 个答案:

答案 0 :(得分:3)

给出格式良好的 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片段的事实在很大程度上与此无关。它唯一的区别是你不需要为输入的命名空间定义一个新的前缀。