可以请您协助以下解决方法。
有时,源文件缺少孔段(具有编号为3的子'count'元素)。在这种情况下,我需要映射所有丢失的节点段并添加一些特定值。
请在下面查看包含所有“节点”段的正确的源xml文件。
<?xml version="1.0" encoding="utf-8"?>
<root>
<group>
<node segment="1">
<count>2</count>
<value>value_2</value>
</node>
<node segment="1">
<count>3</count>
<value>value_3</value>
</node>
<node segment="1">
<count>1</count>
<value>value_1</value>
</node>
</group>
</root>
下面的内容并没有全部细分。
<?xml version="1.0" encoding="utf-8"?>
<root>
<group>
<node segment="1">
<count>2</count>
<value>value_2</value>
</node>
<node segment="1">
<count>1</count>
<value>value_1</value>
</node>
</group>
</root>
组成部分是:
<node segment="1">
<count>3</count>
<value>value_3</value>
</node>
我在下面的xslt脚本上工作,但是它没有给我正确的输出结果。请协助
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root/group[not(node/count='3')]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<node>
<count><xsl:value-of select="'some_results'"></xsl:value-of></count>
<value><xsl:value-of select="'some_results'"/></value>
</node>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node[not(count='3')]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<count><xsl:value-of select="count"></xsl:value-of></count>
<value><xsl:value-of select="value"/></value>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
如果存在具有子元素“ count” = 3的元素“ node”,则按原样映射。
否则输出将是:
<?xml version="1.0" encoding="utf-8"?>
<root>
<group>
<node segment="1">
<count>2</count>
<value>value_2</value>
</node>
<node segment="1">
<count>some_results</count>
<value>some_results</value>
</node>
<node segment="1">
<count>1</count>
<value>value_1</value>
</node>
</group>
</root>
谢谢, 大流士
答案 0 :(得分:0)
不是很简单吗?
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="group[not(node/count='3')]">
<xsl:copy>
<!-- add missing node-->
<node segment="1">
<count>some_results</count>
<value>some_results</value>
</node>
<!-- process existing nodes -->
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>