如果子节点为空,则有条件地删除父节点

时间:2013-10-08 16:34:01

标签: xml xslt xslt-1.0

正如标题描述的那样,我试图像这样使用xml:

<Measurement>
    <Name>Board_1_Output_0</Name>
    <LongIdentifier>Board 1 Output 0<LongIdentifier/>
    ...
    <ECUAddress>2000000F</ECUAddress>
</Measurement>
<Measurement>
    <Name/>
    <LongIdentifier/>
    ...
    <ECUAddress/>
</Measurement>
如果<Measurement>的任何子节点都为空,请

并有条件地删除<Measurement>

<Measurement>
    <Name>Board_1_Output_0</Name>
    <LongIdentifier>Board 1 Output 0<LongIdentifier/>
    ...
    <ECUAddress>2000000F</ECUAddress>
</Measurement>

对于本节,我当前的xslt如下所示:

<xsl:for-each select="Measurement">
    <xsl:text>/begin MEASUREMENT</xsl:text>
    <xsl:text>/* Name           */&#x09;</xsl:text>
    <xsl:value-of select ="Name"/>
    <xsl:apply-templates select="LongIdentifier">
    <xsl:text>ECU_ADDRESS&#x09;&#x09;&#x09;&#x09;</xsl:text>
    <xsl:value-of select ="ECUAddress"/>
<xsl:text>/end MEASUREMENT</xsl:text>
</xsl:for-each ><!-- Measurement -->

我认为如果任何子标记为空,我可以有条件地查看每个部分并且不打印任何<Measurment> XML标记,但是,我只能实现保留父<Measurement>元素:

<Measurement></Measurement>

当我发现在同一个xslt样式表中有一个空子项时,有没有办法删除父xml节点?或者我是否需要通过不同的样式表运行xml以删除任何具有空子节点的XML节点?

1 个答案:

答案 0 :(得分:1)

您可以在for-each中使用一些XPath来过滤掉<Measurement>元素。如果要删除任何子元素为空的所有元素,您可以执行以下操作:

<xsl:for-each select="Measurement[not(*[. = ''])]">
     ....
</xsl:for-each>

即。只选择没有任何子元素为空的<Measurement>个元素。