2016-12-10 3 views
0

この文書では、2番目の列が空白の場合は、前の行の値を使用することを意味します。相違点があるフィールドのXPath?

私は行が二列が Englishありましたので、これらの行になりたい
<doc> 
<table> 
<tr><td>ASU</td><td>CS</td><td>3</td></tr> 
<tr><td>ASU</td><td>English</td><td>3</td></tr> 
<tr><td>ASU</td><td></td><td>4</td></tr> 
<tr><td>ASU</td><td>French</td><td>3</td></tr> 
</table> 
<table> 
<tr><td>CMU</td><td>CS</td><td>4</td></tr> 
<tr><td>CMU</td><td>English</td><td>3</td></tr> 
<tr><td>CMU</td><td>French</td><td>3</td></tr> 
<tr><td>CMU</td><td></td><td>4</td></tr> 
</table> 
<table> 
<tr><td>SDSU</td><td>English</td><td>3</td></tr> 
<tr><td>SDSU</td><td></td><td>4</td></tr> 
<tr><td>SDSU</td><td></td><td>5</td></tr> 
<tr><td>SDSU</td><td>French</td><td>4</td></tr> 
</table> 
</doc> 

<tr><td>ASU</td><td>English</td><td>3</td></tr> 
<tr><td>ASU</td><td></td><td>4</td></tr> 
<tr><td>CMU</td><td>English</td><td>3</td></tr> 
<tr><td>SDSU</td><td>English</td><td>3</td></tr> 
<tr><td>SDSU</td><td></td><td>4</td></tr> 
<tr><td>SDSU</td><td></td><td>5</td></tr> 

XPathは、このためには何でしょうか?

答えて

2

(これはXPath 1.0を使用しています。最近のXPathバージョンでは、より良い解決策があります)。それは簡単ですので

まず、あなたは、tr秒をしたい:あなたが欲しい

/doc/table/tr[...some predicate...] 

行をされているか:

  1. trはただ「英語」

    が含まれているとのそれら
    tr[2] = 'English' 
    
  2. または第2のtrは、最初の1([1])が第2 trを持って

    preceding-sibling::tr[td[2] != ''] 
    

    ... ...

    tr[2] = '' 
    

    と、tr空秒を持っていない前の兄弟行を見て空でありますそれは、「英語」

    /td[2] = 'English' 
    

だから組み合わせが含まそのすべての、あなたに望ましい行を与えるクエリ:

/doc/table/tr[td[2] = 'English' 
    or (td[2] = '' 
    and preceding-sibling::tr[td[2] != ''][1]/td[2] = 'English')] 
+0

私の答えについてのご意見ありがとうございます。私はそれを削除します。 –