0
<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>tags 和<h2>tags 不包含任何属性。

4

3 回答 3

1

使用

count((//h2)[1]/following::p[count(following::h2[1] | (//h2)[2]) = 1])
于 2012-12-05T13:48:58.433 回答
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>
于 2012-12-05T10:45:46.257 回答
1

XPath 在 XML 上运行,而不是在 HTML 上运行。虽然 HTML 也可能是格式良好的 XML,但您的情况肯定不是这样。

如果您想使用 XPath,您还需要使用一个工具来将其加载为有效的 XML DOM,或者首先将其转换为格式良好的 XML。如果做不到这一点,您唯一现实的选择是使用文本处理方法来执行此操作。

于 2012-12-05T15:11:05.780 回答