来源结构:
<XML_ITEM_TAB>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>0</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII></O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>200.00</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>100.00</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
</XML_ITEM_TAB>
Target Strucutre:
<a:NFeGoods>
<a:recordset>
<a:nota_ini_one>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
<a:vII>
<xsl:value-of select="O_VII"/>
</a:vII>
</a:nota_ini_one>
</a:recordset>
</a:NFeGoods>
XSLT中的要求:
a:vII
字段的出现次数为0:1。O_VII
值。O_VII
中不存在零以外的值,则需要将其替换为0.00; ;
替换零或有效值。所需输出的示例:
1.IF valid non zero value exists:
<a:NFeGoods>
<a:recordset>
<a:nota_ini_one>
<Field1>Yyyy</Field3>
<Field2>Yyyy</Field4>
<a:vII>200.00</a:vII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</a:nota_ini_one>
</a:recordset>
</a:NFeGoods>
2.IF only zero value exist for OVII field in one of the item:
<a:NFeGoods>
<a:recordset>
<a:nota_ini_one>
<Field1>Yyyy</Field3>
<Field2>Yyyy</Field4>
<a:vII>0.00</a:vII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</a:nota_ini_one>
</a:recordset>
</a:NFeGoods>
3.If no zero or no non zero value exist for OVII field in all items:
<a:NFeGoods>
<a:recordset>
<a:nota_ini_one>
<Field1>Yyyy</Field3>
<Field2>Yyyy</Field4>
<a:vII>;</a:vII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</a:nota_ini_one>
</a:recordset>
</a:NFeGoods>
Also please note there are some other logic used for other nodes.So the logic need to appiled in inside node <a:vII>regured logic to get OVII value </a:vII>.
答案 0 :(得分:0)
很难理解到底想要什么 - 只是我的猜测:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="some:a">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<a:NFeGoods>
<xsl:apply-templates/>
</a:NFeGoods>
</xsl:template>
<xsl:template match="item">
<a:recordset>
<a:nota_ini_one>
<xsl:apply-templates select="*[not(self::O_VII)]"/>
<xsl:variable name="vX" select=
"/*/*/O_VII
[number(.) = number(.)
and
not(. = 0)
]
[1]
"/>
<xsl:variable name="vZerosOnly" select="not($vX)"/>
<a:vII>
<xsl:value-of select=
"concat($vX, substring('0.00;', 1 div $vZerosOnly))"/>
</a:vII>
</a:nota_ini_one>
</a:recordset>
</xsl:template>
<xsl:template match="Field1|Field2"/>
</xsl:stylesheet>
当应用于提供的XML时(必须纠正它,因为它严重格式错误!!!):
<XML_ITEM_TAB>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>0</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII></O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>200.00</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
<item>
<Field1>Yyyy</Field1>
<Field2>Yyyy</Field2>
<O_VII>100.00</O_VII>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
</item>
</XML_ITEM_TAB>
结果是想要的格式:
<a:NFeGoods xmlns:a="some:a">
<a:recordset>
<a:nota_ini_one>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
<a:vII>200.00</a:vII>
</a:nota_ini_one>
</a:recordset>
<a:recordset>
<a:nota_ini_one>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
<a:vII>200.00</a:vII>
</a:nota_ini_one>
</a:recordset>
<a:recordset>
<a:nota_ini_one>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
<a:vII>200.00</a:vII>
</a:nota_ini_one>
</a:recordset>
<a:recordset>
<a:nota_ini_one>
<Field3>Yyyy</Field3>
<Field4>Yyyy</Field4>
<a:vII>200.00</a:vII>
</a:nota_ini_one>
</a:recordset>
</a:NFeGoods>