我正在尝试删除XML文档中的空元素。我希望id31,id32和id33在空时删除。下面是XSLT输出的示例。我正在尝试使用下面的XSLT,但我没有运气。关于我做错了什么的任何想法?感谢
数据
<Item type="Part AML">
<related_id>
<Item type="Manufacturer Part">
<id keyed_name="1234" type="Manufacturer Part"></id>
<manufacturer keyed_name="Bobs Workshop" type="Manufacturer"></manufacturer>
<item_number>1234</item_number>
</Item>
</related_id>
</Item>
<Item type="Part Document">
<related_id keyed_name="D000005" type="Document">
<Item type="Document">
<id keyed_name="D000005" type="Document"></id>
<major_rev>B</major_rev>
<name>Firmware 8-16-12</name>
<item_number>D000005</item_number>
</Item>
</related_id>
</Item>
<Item type="Part Document">
<related_id keyed_name="D000003" type="Document">
<Item type="Document">
<id keyed_name="D000003" type="Document"></id>
<major_rev>A</major_rev>
<name>Design Spec</name>
<item_number>D000003</item_number>
</Item>
</related_id>
</Item>
输出
<td width="5%" align="center" uniqueID="ms__id31"></td>
<td width="13%" align="center" uniqueID="ms__id32"></td>
<td width="13%" align="center" uniqueID="ms__id33"></td>
<td width="5%" align="center" uniqueID="ms__id34">D000003</td>
<td width="13%" align="center" uniqueID="ms__id35">Design Spec</td>
<td width="8%" align="center" uniqueID="ms__id36">A</td>
论坛代码
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(@*|*|comment()|processing-instruction()) and normalize-space()='']"/>
我的XSLT
<xsl:template match="Item[@type='Part AML']|Item[@type='Part Document']">
<tr>
<td width="5%" align="center" uniqueID="ms__id31">
<xsl:value-of select="state"/>
</td>
<td width="13%" align="center" uniqueID="ms__id32">
<xsl:value-of select="related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name"/>
</td>
<td width="13%" align="center" uniqueID="ms__id33">
<xsl:value-of select="related_id[@type='Manufacturer Part']/Item/item_number"></xsl:value-of>
</td>
<td width="13%" align="center" uniqueID="ms__id34">
<xsl:value-of select="related_id[@type='Document']/Item/item_number"></xsl:value-of>
</td>
<td width="13%" align="center" uniqueID="ms__id35">
<xsl:value-of select="related_id[@type='Document']/Item/name"/>
</td>
<td width="8%" align="center" uniqueID="ms__id36">
<xsl:value-of select="related_id[@type='Document']/Item/major_rev"/>
</td>
</tr>
答案 0 :(得分:1)
使用模板。这样,在空案例中都没有应用:
<xsl:template match="Item[@type='Part AML']|Item[@type='Part Document']">
<tr>
<xsl:apply-templates select="state"/>
<xsl:apply-templates select="related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name"/>
<xsl:apply-templates select="related_id[@type='Manufacturer Part']/Item/item_number">
<td width="13%" align="center" uniqueID="ms__id34">
<xsl:value-of select="related_id[@type='Document']/Item/item_number"></xsl:value-of>
</td>
<td width="13%" align="center" uniqueID="ms__id35">
<xsl:value-of select="related_id[@type='Document']/Item/name"/>
</td>
<td width="8%" align="center" uniqueID="ms__id36">
<xsl:value-of select="related_id[@type='Document']/Item/major_rev"/>
</td>
</tr>
</xsl:template>
<xsl:template match="Item[@type='Part AML' or @type='Part Document']/state">
<td width="5%" align="center" uniqueID="ms__id31">
<xsl:apply-templates>
</td>
</xsl:template>
<xsl:template match="Item[@type='Part AML' or @type='Part Document']/related_id[@type='Manufacturer Part']/Item/manufacturer/@keyed_name">
<td width="13%" align="center" uniqueID="ms__id32">
<xsl:apply-templates>
</td>
</xsl:template>
<xsl:template match="Item[@type='Part AML' or @type='Part Document']/related_id[@type='Manufacturer Part']/Item/item_number">
<td width="13%" align="center" uniqueID="ms__id33">
<xsl:apply-templates>
</td>
</xsl:template>
如果剩余的<td>
可能也有空值,则可以使用相同的模式。