如何在两个</p> <h2>标签之间编写xpath来计算<p>标签?</h2>

时间:2012-12-05 10:19:36

标签: html xpath

<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>代码不包含任何属性。

3 个答案:

答案 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。如果做不到这一点,你唯一可行的选择是使用文本处理方法来做到这一点。