如何选择那些没有文本子元素的元素

时间:2014-04-26 20:24:08

标签: xml xpath

在下面的文档中,我试图让那些元素没有文本子元素。 但是每一次努力都没有。

<a>
      <b>
         <c> this is nice place </c>
      </b>

      <d> 
         <e> where this place is </e>
         <f> this place is very close to us</f>
      </d>

      <g> 
        <h/>
      </g>

     <i/>
</a>

3 个答案:

答案 0 :(得分:2)

这个怎么样:

//*[not(node())]

Test query here

答案 1 :(得分:0)

如果没有单个文本节点,则复制空元素(a的直接子元素)及其子元素的样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:apply-templates select="a"/>
  </xsl:template>

  <xsl:template match="a">
    <empty>
      <xsl:copy-of select="*[not(node()/text())]"/>
    </empty>
  </xsl:template>
</xsl:stylesheet>

结果:

<?xml version="1.0" encoding="utf-8"?>
<empty>
  <g>
    <h />
  </g>
  <i />
</empty>

答案 2 :(得分:0)

因此,如果我理解正确,您希望a的所有子节点都没有文本节点吗?

/a/element()[not(.//text())]