我需要检查order元素是否有一个节点“attribute”,它有一个子节点“name”,文本为SERIAL,子节点“value”为空。
示例输入#1:无序列号值。
<orders>
<order>
<attributes>
<attribute>
<name>SERIAL</name>
<value></value>
</attribute>
<attribute>
<name>BATCH</name>
<value>Batch1</value>
</attribute>
</attributes>
</order>
</orders>
#1的输出:无序列号
<externalorder>
<batchnumbers>
<batch>Batch1</batch>
<batchnumbers>
</externalorder>
样品输入#2:带序列号但没有批号
<orders>
<order>
<attributes>
<attribute>
<name>SERIAL</name>
<value>1</value>
</attribute>
<attribute>
<name>SERIAL</name>
<value>2</value>
</attribute>
<attribute>
<name>BATCH</name>
<value></value>
</attribute>
</attributes>
</order>
</orders>
#2的输出
<externalorder>
<serialnumbers>
<serialnumber>1</serialnumber>
<serialnumber>2</serialnumber>
<serialnumbers>
</externalorder>
答案 0 :(得分:1)
这仍然是同一个基本问题:您需要两个模板,一个匹配attribute[name='BATCH' and value!='']
,另一个匹配attribute[name='SERIAL' and value!='']
。如果你真的需要这样做,我会留给你弄清楚如何压制空节点。
更新了新的输入/输出:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/orders/order">
<externalorder>
<serialnumbers>
<xsl:apply-templates select="attributes/attribute[name='SERIAL' and value!='']" />
</serialnumbers>
<batchnumbers>
<xsl:apply-templates select="attributes/attribute[name='BATCH' and value!='']" />
</batchnumbers>
</externalorder>
</xsl:template>
<xsl:template match="attribute[name='SERIAL']">
<serialnumber>
<xsl:value-of select="value" />
</serialnumber>
</xsl:template>
<xsl:template match="attribute[name='BATCH']">
<batch>
<xsl:value-of select="value" />
</batch>
</xsl:template>
</xsl:stylesheet>