コンテキストがdivision/division/*トピックを指しているとき、body/divisionの下にあるすべてのtopicタグをカウントし、前のbody/division/divisionタグのカウントに結果を追加したい。XPATH:先行するDiv要素の数をカウントする
出力=ボディ/除算+ボディ/分裂の回数/除算例えばので
<?xml version="1.0" encoding="UTF-8"?>
<body>
<division>
<Atopic><longtitle>TitleDiv1 Atopic</longtitle></Atopic>
<Btopic><longtitle>TitleDiv1 Btopic</longtitle></Btopic>
<Ctopic><longtitle>TitleDiv1 Ctopic</longtitle></Ctopic>
<division>
<Atopic><longtitle>TitleDiv1.1 Atopic</longtitle></Atopic>
</division>
<division>
<Atopic><longtitle>TitleDiv1.2 Atopic</longtitle></Atopic>
</division>
</division>
<division>
<Atopic><longtitle>TitleDiv2 Atopic</longtitle></Atopic>
<Dtopic><longtitle>TitleDiv2 Dtopic</longtitle></Dtopic>
<division>
<Atopic><longtitle>TitleDiv2.1 Atopic</longtitle></Atopic>
</division>
<division>
<Ctopic><longtitle>TitleDiv2.2 Ctopic</longtitle></Ctopic>
</division>
</division>
</body>
の下にあるすべてのトピック
私のコンテキストは本部の1/2である場合、ロジックがすべきbody/division1のすべての*トピックを数えます。したがって、3(Atopic、Btopic、Ctopic)を返します。ここには、前のボディ/除算/除算要素はありません。 Div1/3と同様に、ボディ/ディビジョンタグの下の* 3、またbody/div/divの前にカウントする必要があります(つまり3 + 1 = 4)。
コンテキストがDiv2/1の場合、カウンタはbody/division2の*トピックのみを考慮する必要があります。
Div2/1 Atopicのロジックを使用すると、Div2タグ(body/division)には2つのトピックがあり、body/div/divの前にはないので "2"を返します。出力= 2。ここではDiv2タグの前身/除算/除算を考慮する必要があり、Div1の本体/除算/除算は考慮しないでください。要するに、ボディ/ディビジョン/ディビジョンは、新しいボディ/ディビジョンに遭遇したときにリセットされるべきである。
plsアドバイス。
これは、以前の質問とどのように違うのですか?http://stackoverflow.com/questions/39531286/xpathget-preceding-childrens –
P.S.あなたの例は、(a)部門に一意のid属性があり、(b)トピックに固有の名前があり、(c)適切にインデントされていれば、はるかに明確になります。 「.... DIV 1 ......」などが正確に何になっているのかははっきりしない。彼らが要素であれば、なぜそれらを要素にしないのですか? –
こんにちは、マイケル、私はまた、トピック/ div *をトピックに追加する必要があるという違いもあります。 "count(ancestor :: division [last()]/* [contains(name()、 'topic')])"あなたのゾルは体/部門の*トピックを考えるときは完璧にうまくいった。しかし、私はまた、コンテキストが1/3のときにそれを返すように、カウントに追加する除算/除算を必要とする(ancestor :: division [last()]/* [contains(name()、 'topic')])結果body/divと1 div/div = 4の下の3つのトピック) –