首页 文章

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

提问于
浏览
0

正如 Headers 所描述的那样我试图像这样使用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 回答

  • 1

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

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

    即只选择 <Measurement> 元素,其中没有任何子元素为空 .

相关问题