私はかなり厄介なHTMLソースコンテンツを扱っており、単一のolを(ソースからの)属性が特定のリストアイテムを独自のサブリストに入れるかどうかを決定するものに構造化しようとしています。リストもいくつかのolに分割されていますが、親ノードを無視することで回避できると思います。
ソース:
<div class="x-popup-text c3" id="POPUP172050488">
<p>To add multiple balance adjustments:</p>
<ol>
<li class="kadov-p-CStep">
<p class="Step">Check
<span class="hcp1">Add to queue</span> at the bottom of the page.</p>
</li>
<li class="kadov-p-CStep">
<p class="Step">At the top of the page, enter the
<span class="hcp1">Account</span>.  This is a three-part field:</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">In the first part, select the bank number  from the drop-down list.</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">In the second part, select the application code from the drop-down list.</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">In the third part, enter the account number or click the account search button
<img src="../mag_glass_blue_bkgrd.gif" x-maintain-ratio="TRUE" width="16" height="16" border="0" class="hcp2 c1" /> to find it.</p>
</li>
</ol>
<ol start="3">
<li class="kadov-p-CStep">
<p class="Step">Enter the start date for the adjustment in the
<span class="hcp1">From</span> field or click the calendar button
<img src="../calendar.gif" x-maintain-ratio="TRUE" width="16" height="18" border="0" class="hcp2 c2" /> to select the date.</p>
</li>
<li class="kadov-p-CStep">
<p class="Step">Enter the end date for the adjustment in the
<span class="hcp1">Through</span> field or click the calendar button
<img src="../calendar.gif" x-maintain-ratio="TRUE" width="16" height="18" border="0" class="hcp2 c2" /> to select the date.</p>
</li>
</ol>
<p class="StepText">
<span class="hcp1">Tip:</span>  The Through date must be the same as or after the From date.</p>
<ol start="5">
<li class="kadov-p-CStep">
<p class="Step">For each balance you want to adjust, do the following:</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">In the table at the bottom of the page, find the appropriate
<span class="hcp1">Balance Type</span> for the adjustment.</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">Enter the
<span class="hcp1">Amount</span> of the adjustment to the right of the balance type.</p>
</li>
<li class="kadov-p-CStepBullet">
<p class="StepBullet">If you want the adjustment to appear on the customer's statement, check the
<span class="hcp1">Print on Statements</span> checkbox that corresponds to the adjustment amount you entered.</p>
</li>
</ol>
<ol start="6">
<li class="kadov-p-CStep">
<p class="Step">Click
<span class="hcp1">Add</span>.</p>
</li>
<li class="kadov-p-CStep">
<p class="Step">Repeat steps 2 through 7 for each additional adjustment you want to add.</p>
</li>
<li class="kadov-p-CStep">
<p class="Step">Click the
<span class="hcp1">View queue</span> link at the bottom of the page to enter the Work Queue and apply the adjustments.</p>
</li>
</ol>
</div>
私は知っている、それは混乱です。
したがって、基本的に:@ class ='kadov-p-CStep'を持つliは、第1レベルのliである必要があります。次の'kadov-p-Step'liの前に@class='kadov-p-CStepBullet'がある後続の兄弟liは、新しい親の下の従属リストに入れる必要があります。
ここの他の場所で、ノードセットの交差を選択するための式を見つけました。
$ns1[count(.|$ns2)=count($ns2)]
私が自分自身の(おそらく非常に混乱した)方法で従おうとしたもの:
<xsl:for-each select="following::li[contains(./@class,'CStepBullet')][count(.|following-sibling::li[not(contains(./@class,'Bullet'))][1]/preceding-sibling::li[contains(./@class,'CStepBullet')]) = count(following-sibling::li[not(contains(./@class,'Bullet'))][1]/preceding-sibling::li[contains(./@class,'CStepBullet')])] ">
現在、これは出力XMLに結果を生成しません。また、不必要に過剰に設計されていると確信しています。
ご覧いただきありがとうございます。事前にアドバイスをお寄せください。