如何从包含查询中排除来自子 class 和一些同级文本之后的所有信息?
How to exclude from a contains query all the informations from a child class & after some sibling text?
<root>
<a></a>
<b></b>
<c></c>
<a></a>
<d></d>
<e></e>
<a></a>
<a></a>
</root>
在 XML 文档中,如何从包含研究中排除 之后节点的所有信息?
仅从以下位置获取结果:
<a></a>
<b></b>
<c></c>
<a></a>
<d></d>
我不能只说
的前 2 个答案
首先是
和因为有时一个值只存在于
之后
我有这个有效的代码:
//div[contains(@class,'class searched')]/*[contains(text(), 'Text Searched')] | //div[contains(@class,'class searched')]/*[not(contains(@class,'class excluded'))]/*[contains(text(), 'Text Searched')]
感谢您的帮助:)
为清楚起见编辑:
<div Class="TopClass">
<div Class="ClassA">
<div Class="ClassB">
<h3> Text Researched</h3>
<u1 Class="ClassC">
<h3> Text Researched</h3>
</u1>
</div>
</div>
<h4>Other Text</h4>
<div Class="ClassA">
<div Class="ClassB">
<h3> Text Researched</h3>
<u1 Class="ClassC">
<h3> Text Researched</h3>
</u1>
</div>
</div>
我只想获取 Class B 和 Class C 之间以及“其他文本”上方的已研究文本。有时“研究的文本”只会出现在“其他文本”下方,我不想得到这个结果,所以 [1] 在那里不起作用。 <h3>
和 <h4>
也在代码的其他地方使用。
鉴于此 html
<div class="TopClass">
<div class="ClassA">
<div class="ClassB">
<h3> Text Researched 1</h3>
<u1 class="ClassC">
<h3> Text Researched 2</h3>
</u1>
</div>
</div>
<h4>Other Text</h4>
<div class="ClassA">
<div class="ClassB">
<h3> Text Researched 3</h3>
<u1 class="ClassC">
<h3> Text Researched 4</h3>
</u1>
</div>
</div>
</div>
此 XPath 表达式将获得前 2 个 h3
标记
//div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3[contains(.,"Text Researched 1")]/text()
结果:
echo -e 'cat //div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3/text()\nbye' | xmllint --shell test.html
/ > cat //div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3[contains(.,"Text Researched 1")]/text()
-------
Text Researched 1
/ > bye
<root>
<a></a>
<b></b>
<c></c>
<a></a>
<d></d>
<e></e>
<a></a>
<a></a>
</root>
在 XML 文档中,如何从包含研究中排除
仅从以下位置获取结果:
<a></a>
<b></b>
<c></c>
<a></a>
<d></d>
我不能只说
的前 2 个答案首先是
和
我有这个有效的代码:
//div[contains(@class,'class searched')]/*[contains(text(), 'Text Searched')] | //div[contains(@class,'class searched')]/*[not(contains(@class,'class excluded'))]/*[contains(text(), 'Text Searched')]
感谢您的帮助:)
为清楚起见编辑:
<div Class="TopClass">
<div Class="ClassA">
<div Class="ClassB">
<h3> Text Researched</h3>
<u1 Class="ClassC">
<h3> Text Researched</h3>
</u1>
</div>
</div>
<h4>Other Text</h4>
<div Class="ClassA">
<div Class="ClassB">
<h3> Text Researched</h3>
<u1 Class="ClassC">
<h3> Text Researched</h3>
</u1>
</div>
</div>
我只想获取 Class B 和 Class C 之间以及“其他文本”上方的已研究文本。有时“研究的文本”只会出现在“其他文本”下方,我不想得到这个结果,所以 [1] 在那里不起作用。 <h3>
和 <h4>
也在代码的其他地方使用。
鉴于此 html
<div class="TopClass">
<div class="ClassA">
<div class="ClassB">
<h3> Text Researched 1</h3>
<u1 class="ClassC">
<h3> Text Researched 2</h3>
</u1>
</div>
</div>
<h4>Other Text</h4>
<div class="ClassA">
<div class="ClassB">
<h3> Text Researched 3</h3>
<u1 class="ClassC">
<h3> Text Researched 4</h3>
</u1>
</div>
</div>
</div>
此 XPath 表达式将获得前 2 个 h3
标记
//div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3[contains(.,"Text Researched 1")]/text()
结果:
echo -e 'cat //div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3/text()\nbye' | xmllint --shell test.html
/ > cat //div[@class="ClassA" and following-sibling::h4[.="Other Text"]]//h3[contains(.,"Text Researched 1")]/text()
-------
Text Researched 1
/ > bye