使用xslt在现有元素下面添加新元素



我有一个元素名称"争议;并且想要添加新的元素名称";记录";元素下方。例如:当前的XML是使用ssis技术的这种格式

<root>
<Grade></Grade>
<Fuel>
<Quantity/>
<Additional/>
<Dispute>0</Dispute>
</Fuel>
<Fuel>
<Quantity/>
<Additional/>
<Dispute>1</Dispute>
</Fuel>
</root>


Need to add new element under dispute.
<root>
<Grade></Grade>
<Fuel>
<record>1</record>
<Quantity/>
<Additional/>
<Dispute>0</Dispute>

</Fuel>
<Fuel>
<record>2</record>
<Quantity/>
<Additional/>
<Dispute>1</Dispute>
</Fuel>
</root>

XSLT无法添加属性值为1和2 的记录元素

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Dispute">
<Dispute>0</Dispute>
copy-of select="."/>
<record>1</record>
</xsl:template>
<xsl:template match="Dispute">
<Dispute>1</Dispute>
copy-of select="."/>
<record>2</record>
</xsl:template>
</xsl:stylesheet>

尝试以下操作:

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="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Dispute">
<xsl:copy-of select="."/>
<record>
<xsl:number count="Fuel"/>
</record>
</xsl:template>
</xsl:stylesheet>

您没有指定用于填充添加的record元素的确切逻辑。上面的例子将使用序列号。


添加:

我想要燃料元件正下方的记录元件

您可以将其重述为";刚好在CCD_ 2元素"之前;只需将第二个模板替换为:

<xsl:template match="Quantity">
<record>
<xsl:number count="Fuel"/>
</record>
<xsl:copy-of select="."/>
</xsl:template>

或者你可以改变策略并使用:

<xsl:template match="Fuel">
<xsl:copy>
<record>
<xsl:number/>
</record>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

最新更新