繁体   English   中英

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

[英]Conditionally delete Parent Node if Children nodes are empty

正如标题所描述的,我正在尝试采用这样的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节点?

您可以在for-each使用一些XPath来过滤<Measurement>元素。 如果要删除所有这些元素,其中的任何子元素是空的,你可以这样做:

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

即,仅在没有任何子元素为空的情况下选择<Measurement>元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM