使用 xslt 在现有元素下方添加新元素
Add new element below existing element using xslt
我有一个名为“Dispute”的元素,想在该元素下方添加新的元素名称“Records”。
eg:当前的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
元素的确切逻辑。上面的例子将使用序号。
已添加:
I want record element just below the fuel element
您可以将其重述为“就在 Quantity
元素之前”,只需将第二个模板替换为:
<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>
我有一个名为“Dispute”的元素,想在该元素下方添加新的元素名称“Records”。 eg:当前的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
元素的确切逻辑。上面的例子将使用序号。
已添加:
I want record element just below the fuel element
您可以将其重述为“就在 Quantity
元素之前”,只需将第二个模板替换为:
<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>