如果两个子节点为空,则删除父节点

时间:2018-03-20 11:09:39

标签: xml xslt xpath

我有以下XML文件。 `

    <objects>
       <infos>
          <rep-id-name id="12345"/>
          <rep-name>IT</rep-name>
          <create-user>354832</create-user>
          <update-user>354832</update-user>
          <create-date>2013-04-22T12:37:56.798Z</create-date>
          <update-date>2013-04-22T14:41:16.299Z</update-date>
          <parameter-definition/>
          <column-definition/>
       </infos>
       <infos>
          <rep-id-name id="255962905"/>
          <rep-name>IT</rep-name>
          <create-user>35483</create-user>
          <update-user>35483</update-user>
          <create-date>2013-04-22T12:37:56.798Z</create-date>
          <update-date>2013-04-22T12:43:44.238Z</update-date>
          <parameter-definition>
             <contains-loc-string>True</contains-loc-string>
          </parameter-definition>
          <column-definition/>
       </infos>
</objects>

如何检查两个子节点(参数定义列定义)是否为空并删除完整的父节点。所以预期的结果是:

<objects>
    <infos>
          <rep-id-name id="255962905"/>
          <rep-name>IT</rep-name>
          <create-user>35483</create-user>
          <update-user>35483</update-user>
          <create-date>2013-04-22T12:37:56.798Z</create-date>
          <update-date>2013-04-22T12:43:44.238Z</update-date>
          <parameter-definition>
             <contains-loc-string>True</contains-loc-string>
          </parameter-definition>
          <column-definition/>
       </infos>
</objects>

1 个答案:

答案 0 :(得分:0)

在样式表中包含以下模板规则:

<xsl:template match="infos[not(parameter-definition/node() 
                           or column-definition/node())]"/>

我在这里解释为“空”,意思是“没有子节点” - 其他定义也是可能的,例如你可能想要允许注释或空白文本。如果元素不存在,这也会将元素视为空。