2014-10-27 51 views
0

如何將所有字段從xml複製到xslt,但字段名稱=「Category」?我用如何將所有字段從xml複製到xslt?

Field[not(name()='Category')] 

但是當我預覽結果,只顯示字段名=「類別」,而不是顯示的所有領域。

XML:

<Form name="Form1" type="TextView" label="Cash Pickup Form"> 

<Field name="Category" type="TextView" label="FormType" value="Form1"/> 

<Field type="Delimiter"/> 
<Field name="ContractNumber" type="TextView" label="Contract number" value=""/> 
<Field type="Delimiter"/> 
<Field name="ClientName" type="TextView" label="Name of Client" value=""/> 
<Field name="BirthDate" type="TextView" label="Birthday" value=""/> 
<Field name="DueDate" type="TextView" label="Due Date" value=""/> 
</Form> 

XSLT:

<xsl:variable name="Category" select="/Form/Field[@name='Category']/@value"/> 
<xsl:template match="/"> 
<xsl:apply-templates select="Form"/> 
</xsl:template> 

<xsl:template match="Form"> 
<xsl:element name="Form"> 
    <xsl:attribute name="name"> 
    <xsl:value-of select="@name"/> 
    </xsl:attribute> 
    <xsl:attribute name="type"> 
    <xsl:value-of select="@type"/> 
    </xsl:attribute> 
    <xsl:attribute name="label"> 
    <xsl:value-of select="@label"/> 
    </xsl:attribute> 
    <xsl:copy-of select="namespace::*[not(name()='ns2') and not(name()='')]"/> 
    <xsl:call-template name="Arrange"/> 
</xsl:element> 
</xsl:template> 

<xsl:template name="Arrange"> 
    <xsl:apply-templates select="Field[not(name()='Category')]"/> 
</xsl:template> 
</xsl:stylesheet> 
+0

與命名空間有什麼關係? – 2014-10-27 03:19:05

+0

@ michael.hor257k im使用命名空間for uri – User014019 2014-10-27 03:28:13

+0

不知道你的意思,或者你的樣式表中的那部分。 – 2014-10-27 03:43:47

回答

1

一方面,表達:

Field[not(name()='Category')] 

選擇每一個領域,因爲Field元素的名稱是 '現場' - 因此它不能是'類別'。你大概的意思是:

Field[not(@name='Category')] 

那就是沒有一個name屬性與「類別」的價值Field元素。

接下來,您正在將模板應用於Field - 但您沒有模板匹配Field,因此沒有應用任何內容。如果你改變了Arrange模板:

<xsl:template name="Arrange"> 
    <xsl:apply-templates select="Field[not(@name='Category')]"/> 
</xsl:template> 

,並添加:

<xsl:template match="Field"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

,你可能會得到你想要的結果。

當然,你可以縮短所有的只是:

<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:template match="/Form"> 
    <xsl:copy> 
     <xsl:copy-of select="@name | @type | @label | Field[not(@name='Category')]"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

或者,如果你喜歡:

<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="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="Field[@name='Category']"/> 

</xsl:stylesheet> 

因爲是將複製一切,除了類別字段/秒。

相關問題