<p>
<p>
<h2>
<p>
<ul>
<p>and two special regions:</p>
<ul>
<h2>
<span class="editsection">
<span id="History" class="mw-headline">History</span>
</h2>
<div class="thumb tleft">
<p>
<p>
<h3>
<p>
<div class="thumb tright">
<div class="thumb tright">
<p>
<p>
<h3>
<p>
<h3>
<div class="thumb tright">
<p>
<p>
<p>
<p>
<p>
<p>
<h3>
<p>
<h2>
<span class="editsection">
<span id="Demography" class="mw-headline">Demography</span>
</h2>
<div class="thumb tright">
<p>
<div class="thumb tright">
<p>
<table class="wikitable sortable jquery-tablesorter">
<p>
<p>
<p>
如何计算两个<P>
代码之间<h2>
代码的数量?
以标记
开头<h2>
<span class="editsection">
<span id="History" class="mw-headline">History</span>
</h2>
和
<h2>
<span class="editsection">
<span id="Demography" class="mw-headline">Demography</span>
</h2>
xpath应该在这两个<p>
标记之间检索13 <h2>
个标记。那么如何为此编写xpath?
注意:标记<p>
<h2>
<h3>
<ul>
<div>
是兄弟姐妹。
<p>
代码和<h2>
代码不包含任何属性。
答案 0 :(得分:1)
这个应该适合你:
count(//p[preceding-sibling::h2[./span[@id='History']] and following-sibling::h2[./span[@id='Demography']]])
您可以使用以下转换对其进行测试:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(//p[preceding-sibling::h2[./span[@id='History']] and following-sibling::h2[./span[@id='Demography']]])" />
</xsl:template>
</xsl:transform>
答案 1 :(得分:1)
使用强>:
count((//h2)[1]/following::p[count(following::h2[1] | (//h2)[2]) = 1])
答案 2 :(得分:1)
XPath在XML上运行,而不是HTML。虽然HTML也可能是格式良好的XML,但肯定不是你的情况。
如果您想使用XPath,您还需要使用一个工具将其作为有效的XML DOM加载,或者首先将其转换为格式良好的XML。如果做不到这一点,你唯一可行的选择是使用文本处理方法来做到这一点。