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>2つのタグの間にあるタグの数を数える方法は<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>、これら2つのタグの間にある13個のタグを取得する必要があります<h2>。では、このためにxpathを作成するにはどうすればよいでしょうか。

注:タグ<p> <h2> <h3> <ul> <div>は兄弟です。

<p>タグと<h2>タグには属性が含まれていません。

4

3 に答える 3

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

使用

count((//h2)[1]/following::p[count(following::h2[1] | (//h2)[2]) = 1])
于 2012-12-05T13:48:58.433 に答える
1

XPathは、HTMLではなくXMLで動作します。HTMLも整形式のXMLである可能性はありますが、あなたの場合は確かにそうではありません。

XPathを使用する場合は、XPathを有効なXML DOMとしてロードするか、最初に整形式のXMLに変換するツールも使用する必要があります。それができない場合、唯一の現実的なオプションは、テキスト処理メソッドを使用してこれを行うことです。

于 2012-12-05T15:11:05.780 に答える