XSLT - 根据同一级别的另一个元素的值在某个位置插入元素
XSLT - Insert element at a position based on value of another element at same level
<Level>
<Name>XYZ</Name>
<Number>456</Number>
<DateTime>2020-03-11T08:53:00</DateTime>
</Level>
<Level>
<Name>ABC</Name>
<Number>123</Number>
<DateTime>2020-03-13T08:53:00</DateTime>
</Level>
<Level>
<Name>PQR</Name>
<Number>789</Number>
<DateTime>2020-03-12T08:53:00</DateTime>
</Level>
仅当Level/Name = ABC
时才在元素下方插入一个新元素Value
所以结果应该是这样的:
<Level>
<Name>XYZ</Name>
<Number>456</Number>
<DateTime>2020-03-11T08:53:00</DateTime>
</Level>
<Level>
<Name>ABC</Name>
<Number>123</Number>
<Type>Value</Type>
<DateTime>2020-03-13T08:53:00</DateTime>
</Level>
<Level>
<Name>PQR</Name>
<Number>789</Number>
<DateTime>2020-03-12T08:53:00</DateTime>
</Level>
提前致谢。
这是一个可能的解决方案。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Level/Number[../Name='ABC']">
<xsl:copy-of select="."/>
<Type>Value</Type>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
看到它在这里工作:https://xsltfiddle.liberty-development.net/6pS26mN/1
<Level>
<Name>XYZ</Name>
<Number>456</Number>
<DateTime>2020-03-11T08:53:00</DateTime>
</Level>
<Level>
<Name>ABC</Name>
<Number>123</Number>
<DateTime>2020-03-13T08:53:00</DateTime>
</Level>
<Level>
<Name>PQR</Name>
<Number>789</Number>
<DateTime>2020-03-12T08:53:00</DateTime>
</Level>
仅当Level/Name = ABC
时才在元素下方插入一个新元素Value所以结果应该是这样的:
<Level>
<Name>XYZ</Name>
<Number>456</Number>
<DateTime>2020-03-11T08:53:00</DateTime>
</Level>
<Level>
<Name>ABC</Name>
<Number>123</Number>
<Type>Value</Type>
<DateTime>2020-03-13T08:53:00</DateTime>
</Level>
<Level>
<Name>PQR</Name>
<Number>789</Number>
<DateTime>2020-03-12T08:53:00</DateTime>
</Level>
提前致谢。
这是一个可能的解决方案。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Level/Number[../Name='ABC']">
<xsl:copy-of select="."/>
<Type>Value</Type>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
看到它在这里工作:https://xsltfiddle.liberty-development.net/6pS26mN/1