如何解决从“ li”元素中选择所有后代元素,但嵌套的“ li”元素除外
我有以下列表:
<ul>
<li>Two potential pathophysiologic conditions lead to the clinical findings of HF,namely systolic and/or diastolic heart dysfunction.
<ul>
<li>Systolic dysfunction: an <i>inotropic</i> abnormality,due to myocardial infarction (MI) or dilated or ischemic cardiomyopathy (CM),resulting in diminished systolic emptying (ejection fraction <45%).</li>
<li>Diastolic dysfunction: a <i>compliance</i> abnormality,due to hypertensive CM,in which ventricular relaxation is impaired (ejection fraction >45%),resulting in decreased filling.</li>
<li>In an attempt to adopt a more pragmatic classification system,one that has been accepted by both the European and American HF guidelines,the terms HF with reduced,midrange,or preserved LVEF (HFrEF,HFmrEF,and HFpEF,respectively) have been adopted recently.</li>
</ul> </li> </ul>
我想从每个“ li”元素中选择text(),包括所有后代(当前“ li”元素中的文本,后代“ i”,后代“ span”等),但后代:: li除外。我想尝试这样的事情:
descendant-or-self[not(descendant::li)]/text().
我想得到的是:
- 从第一例开始:两种可能的病理生理状况导致HF的临床表现,即收缩压和/或舒张性心脏功能障碍。
- 从第二个李:收缩功能障碍:由于心肌梗塞(MI)或扩张性或缺血性心肌病(CM)引起的肌力异常,导致收缩期排空减少(射血分数
- 来自第三个li:舒张功能障碍:由于高血压CM而导致的顺应性异常,其中心室舒张受损(射血分数> 45%),导致充盈减少。等。
更新:
我不想从第一个“ li”元素中获得以下文本:
导致HF的两种潜在病理生理状况,即心脏收缩功能和/或舒张功能障碍。收缩功能障碍:由于心肌梗塞(MI)或扩张或缺血性心肌病(CM)而引起的肌力异常。舒张功能障碍:高血压CM导致顺应性异常,损害了心室舒张功能(射血分数> 45%),导致充盈减少。等。
使用后代或自身:: * / text()xpath,我得到上面的文本。
UPDATE2: 请想象第一个“ li”还具有后代“ i”或“ span”:
<ul>
<li>Two potential <i>pathophysiologic</i> conditions <span>lead to the</span> clinical findings of HF,namely systolic and/or diastolic heart dysfunction.
<ul>
<li>Systolic dysfunction: an <i>inotropic</i> abnormality,resulting in diminished systolic emptying (ejection fraction <45%).</li>
<li>Diastolic dysfunction: a <i>compliance</i> abnormality,resulting in decreased filling.</li>
<li>In an attempt to adopt a more pragmatic classification system,respectively) have been adopted recently.</li>
</ul> </li> </ul>
我还希望使用“ i”和“ span”文本来获取xpath。还有其他两个列表中的文本(收缩压,舒张压,但分开,而不是第一个列表的一部分)。
类似这样的东西:
(text() | descendant::span/text() | descendant::i/text())/normalize-space()
在此先感谢您的帮助。
解决方法
要选择主li的所有后代而不是嵌套li元素的后代的所有文本节点(如主题标题中所述),可以使用以下XPath:
//text()[ancestor::li][count(ancestor::ul)=1][normalize-space()]
示例数据的输出(1个节点):
Two potential pathophysiologic conditions lead to the clinical findings of HF,namely systolic and/or diastolic heart dysfunction
编辑:根据您的UPDATE 2
要求,您可以使用:
//*[self::i or self::span]/text()|//text()[parent::li][normalize-space()]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。