我有以下示例XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<type>
<subtype id="1">
<Shoebox>
<author index="0">BUILTIN\Administrators</author>
<dateModified index="0">2001-02-23T11:30:38.000
</dateModified>
<title index="0">false</title>
<sourceLocation index="0">\\vms2\TestData\Filesystem\1
doc
</sourceLocation>
<keywords index="0">doc1</keywords>
<contentSize index="0">123</contentSize>
<department index="0">Windows 7</department>
<fileName index="0">doc1.docx</fileName>
<dateCreated index="0">2001-02-
23T11:30:38.000</dateCreated>
<format index="0">docx</format>
</Shoebox>
</subtype>
</type>
下面是我的xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns="urn:philips:en:xsd:Trailbalance.1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="type">
<xsl:element name="trackwise">
<xsl:apply-templates select="subtype"/>
</xsl:element>
</xsl:template>
<xsl:template match="subtype">
<xsl:for-each select="Shoebox">
<capa>
<xsl:copy-of select="node()" />
</capa>
</xsl:for-each>
</xsl:template>
期望xml如下
<?xml version="1.0" encoding="UTF-8"?>
<trackwise>
<capa>
<author>BUILTIN\Administrators</author>
<dateModified>2001-02-23T11:30:38.000 </dateModified>
<title>false</title>
<sourceLocation>\\vms2\TestData\Filesystem\1 doc </sourceLocation>
<keywords>doc1</keywords>
<contentSize >123</contentSize>
<department>Windows 7</department>
<fileName>doc1.docx</fileName>
<dateCreated >2001-02-23T11:30:38.000</dateCreated>
<format>docx</format>
</capa>
</trackwise>
xslt上面的问题是还复制了属性“ index”,我想从所有子节点中删除“ index”属性,在xslt上面我在做什么错了。
答案 0 :(得分:1)
如果要删除所有属性,请使用:
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
请参阅链接:http://xsltransform.net/nbiCsYY
AND
如果要删除所有index
属性,请使用:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@index"/>
答案 1 :(得分:0)
首先,构建一个身份模板:
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
如果要删除所有@index属性,可以使用
<xsl:template match="@index"/>
此外,您也可以使用直接模板匹配来获取所需结果,而不是逐个进行
<xsl:template match="type">
<trackwise>
<xsl:apply-templates/>
</trackwise>
</xsl:template>
<xsl:template match="Shoebox">
<capa>
<xsl:apply-templates/>
</capa>
</xsl:template>
<xsl:template match="subtype">
<xsl:apply-templates/>
</xsl:template>
整个样式表如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@index"/>
<xsl:template match="type">
<trackwise>
<xsl:apply-templates/>
</trackwise>
</xsl:template>
<xsl:template match="Shoebox">
<capa>
<xsl:apply-templates/>
</capa>
</xsl:template>
<xsl:template match="subtype">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:-1)
<capa>
<xsl:apply-templates select="node()"/>
</capa>
use apply-template instead of copy-of element