2012-02-08 63 views
0

我有一个包含大约25个元素的XML文件。我只想转换2个元素并保留其余的XML。有人可以告诉我该怎么做。所有在线的例子都是修改整个XML文档,我不想要这个。我只想修改两个元素的值。如何使用XSL修改小部分的XML

+2

这两个元素是如何唯一标识的?发布了一个xml样本。 – Kristofer 2012-02-08 12:29:42

+0

发布示例XML,以及您希望将这2个元素转换为什么? – 2012-02-08 13:18:20

回答

0

下面是一个实际的例子,我解析一个xsd文件并从中删除所有注释。

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<!-- copy all nodes and attributes --> 
<xsl:template match="node() | @*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node() | @*"/> 
    </xsl:copy> 
</xsl:template> 

<!-- but remove annotations --> 
<xsl:template match="xs:annotation"/> 
6

这些任务是通过使用身份变换模板是

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

,然后通过添加模板的元件被例如改变解决

<xsl:template match="foo"> 
    <bar> 
    <xsl:apply-templates select="@* | node()"/> 
    </bar> 
</xsl:template> 

foo改变到bar元件和/或

<xsl:template match="foobar"/> 

删除foobar元件。

为了让大家进一步的例子,例如,如果我们想复制baz元素与他们的内容,但想添加一个new元素,我们可以添加模板

<xsl:template match="baz"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    <new>...</new> 
    </xsl:copy> 
</xsl:template> 

只要你保持身份转换alive(使用apply-templates)为任何你不想改变的东西,你可以通过为每个要改变的元素编写一个模板来很好地构建你的样式表。

+0

谢谢!它的工作。 – Chandu 2012-02-10 06:37:40