XPath - 如何从子节点中排除文本

问题描述 投票:0回答:2

我想要这个输出(示例):

我想要这个

我正在处理 XML/TEI 文档,我需要使用 XPath 表达式,并且我希望将 div/u 中的文本作为输出,但没有节点元素内的文本,例如“desc”或“vocal>

来自代码(示例):

<div>
<u> 
I want this but 
     *<anchor/><desc>I don't want this</desc><anchor/>
      <anchor/>I don't want this also<anchor/>
     <del type="">I don't want this too</del>*
I want this
</u>
</div>

我尝试使用(示例):

TEI//u[not(desc)]

但它排除了每个内部有

<u>
<desc>

xml xpath xslt xml-parsing tei
2个回答
1
投票

这个 XPath,

//u/text()

将选择文档中所有

u
元素的所有文本节点子节点:

I want this but 
I want this

如果您只想要第一个文本节点子节点,请使用

//u/text()[1]

请注意,这将选择文档中 all

u
元素的第一个文本节点。如果您只想要这些文本节点中的第一个,请使用

(//u/text())[1]

0
投票

此 XPath 表达式将返回所有“u”标签的文本,不包括其中任何“desc”或“anchor”标签的文本:

TEI//u//text()[not(ancestor::desc) and not(ancestor::anchor)]
© www.soinside.com 2019 - 2024. All rights reserved.