场景(缩小):
<a>
<Sections>
<Section>
<Title></Title>
<Subject></Subject>
<Body></Body>
</Section>
<Section>
<Title/>
<Subject/>
<Body/>
</Section>
<Section>
<Title>Hello</Title>
<Subject></Subject>
<Body></Body>
</Section>
<Section>
<Title></Title>
<Subject>I have a problem</Subject>
<Body></Body>
</Section>
</Sections>
</a>
问题:
我应该使用什么XPath来返回至少有一个子节点不为空的<Section/>
个节点列表,以便返回:
<Section>
<Title>Hello</Title>
<Subject></Subject>
<Body></Body>
</Section>
<Section>
<Title></Title>
<Subject>I have a problem</Subject>
<Body></Body>
</Section>
换句话说,应该过滤掉具有完全空子节点的<Section>
个节点。
答案 0 :(得分:2)
尝试:
.//Section[./*/node()]
即。查找具有子节点(文本节点或元素节点)的Section
元素。根据您对空子节点的要求,这可能会也可能不会起作用,因此可能需要改进。
答案 1 :(得分:0)
如果您使用的是XPath 2.0,则可以使用:
/a/Sections/Section[(true() = (for $i in * return has-children($i)))]
如果有子元素,则检查每个子元素,然后检查这对于至少一个孩子是否属实。
我不确定是否可以使用XPath 1.0实现这一点。如果只有文本节点作为子元素,则以下工作:
/a/Sections/Section[not(. = "")]
但是,如果存在空元素,则不会返回该元素,例如<Title><test/></Title>
答案 2 :(得分:0)
试试这个xpath:
//a/Sections/Section[count(*[.!='']) > 0]