我想在XML中添加一个元素,如果缺少某个特定节点,则需要将其添加回来。
示例输入消息是
<document>
<body>
<party>
<gtin>1000909090</gtin>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<attr name="temperatureCode">STORAGE</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE5</attr>
</attrGroupMany>
</row>
<row>
<attr name="temperatureCode">STORAGETEN</attr>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE4</attr>
</attrGroupMany>
</row>
<row>
<attr name="temperatureCode">HANDLINGONE</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE9</attr>
</attrGroupMany>
</row>
</attrGroupMany>
</pos>
</party>
</body>
</document>
由于第二个节点缺少attrGroupMany name =“temperatureStats”,因此需要将其添加回来。
<document>
<body>
<party>
<gtin>1000909090</gtin>
<pos>
<attrGroupMany name="temperatureInformation">
<row>
<attr name="temperatureCode">STORAGE</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE5</attr>
</attrGroupMany>
</row>
<row>
<attr name="temperatureCode">STORAGETEN</attr>
<attrGroupMany name="temperatureStats"/>
</row>
<row>
<attr name="temperatureCode">HANDLING</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE4</attr>
</attrGroupMany>
</row>
<row>
<attr name="temperatureCode">HANDLINGONE</attr>
<attrGroupMany name="temperatureStats">
<attr name="StatsCode">CODE9</attr>
</attrGroupMany>
</row>
</attrGroupMany>
</pos>
</party>
</body>
</document>
基本上我们需要检查是否存在attrGroupMany name =“temperatureStats”,然后添加它。
任何人都可以建议一种方法
答案 0 :(得分:0)
基本上我们需要检查是否存在attrGroupMany name =“temperatureStats”,然后添加它。
转换为
<xsl:if test="not(attrGroupMany[@name='temperatureStats'])">
<attrGroupMany name="temperatureStats"/>
</xsl:if>
只需将其应用于目标row
元素即可。因此样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="row">
<xsl:copy>
<xsl:apply-templates/>
<xsl:if test="not(attrGroupMany[@name='temperatureStats'])">
<attrGroupMany name="temperatureStats"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>