2017-03-06 34 views
0

有以下XML改造XSL內部存儲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。但他們似乎都沒有工作。它甚至有可能實現這一目標嗎?

感謝。

+0

這真的是你的輸入是什麼樣子?沒有名稱空間聲明將'xsl'前綴綁定到名稱空間?如果是這樣,你將無法處理它,因爲它不是XML。 –

+0

與許多XSLT問題一樣,只有一個輸入示例是不夠的。我們需要知道這個例子中的輸入可能會有所不同。例如,它是否可以包含除xsl:element和xsl:attribute之外的指令? –

回答

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片段的事實在此基本無關緊要。它唯一的區別是你不需要爲輸入的名字空間定義一個新的前綴。