我有一个xml文件:
<?xml version="1.0" encoding="iso-8859-1"?>
<Configuration>
<Parameter2>
</Parameter2>
</Configuration>
我想在<Configuration>
和<Parameter2>
部分之间的xml文件中添加以下部分。
<Parameter1>
<send>0</send>
<interval>0</interval>
<speed>200</speed>
</Parameter1>
答案 0 :(得分:4)
此XSLT在Configuration
之前将指定的内容作为Parameter2
元素的子元素插入。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:template match="Configuration">
<xsl:copy>
<xsl:apply-templates select="@*" />
<!--Check for the presence of Parameter1 in the config file to ensure that it does not get re-inserted if this XSLT is executed against the output-->
<xsl:if test="not(Parameter1)">
<Parameter1>
<send>0</send>
<interval>0</interval>
<speed>200</speed>
</Parameter1>
</xsl:if>
<!--apply templates to children, which will copy forward Parameter2 (and Parameter1, if it already exists)-->
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
<!--standard identity template, which copies all content forward-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
更短的解决方案。这个样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="Configuration/*[1]">
<Parameter1>
<send>0</send>
<interval>0</interval>
<speed>200</speed>
</Parameter1>
<xsl:call-template name="identity" />
</xsl:template>
</xsl:stylesheet>
输出:
<Configuration>
<Parameter1>
<send>0</send>
<interval>0</interval>
<speed>200</speed>
</Parameter1>
<Parameter2></Parameter2>
</Configuration>
注意:如果您想在任何位置都没有此元素时添加Parameter1
,则应更改以下模式:Configuration/*[1][not(/Configuration/Parameter1)]