2014-02-23 143 views
2

我試圖從鏈接數字列表中生成html表格行,查詢在線xml文件中是否存在相應的版本號,以及是否添加額外的兄弟元素信息。xquery - 加入條件

這是網上的xml文件:http://www.sec.gov/about/docket/sec-docket-2013.xml

的imlit.xml列表文件看起來像:

<litigation> 

[...] 

<h2>Affiliated Transactions/Joint Transactions</h2> 

    <ul> 
    <li><a href="/litigation/admin/2014/ia-3762.pdf">IA-3762</a></li> 
    <li><a href="/litigation/admin/2013/ia-3654.pdf">IA-3654</a></li> 
    <li><a href="/litigation/admin/2013/34-69425.pdf">34-69425</a></li> 
</ul> 

[...] 

</ligitation> 

我得到這個在Basex工作:

for $x in doc("C:\bob\dev\xquery\imlit.xml")/litigation/ul/li, 
    $y in 
doc("http://www.sec.gov/about/docket/sec-docket-2013.xml")/secDocket/releaseItem[releaseNumber 
= $x/a] 
return (<tr> <td> {$x/a} </td> <td> {data($y/date)} </td> 
<td> {data($y/subjects/subject)} </td> </tr>, '&#xa;') 

和我:

[...] 

<tr> 
    <td> 
    <a href="/litigation/admin/2013/ia-3740.pdf" target="_blank">IA-3740</a> 
    </td> 
    <td>2013-12-17</td> 
    <td>Dappah, Frank</td> 
</tr> 
<tr> 
    <td> 
    <a href="/litigation/admin/2013/ia-3729.pdf" target="_blank">IA-3729</a> 
    </td> 
    <td>2013-12-02</td> 
    <td>Dushek, Charles J. Dushek, Charles S.</td> 
</tr> 

[...] 

但是,如果沒有匹配並且還包含h2,我想插入「佔位符」表格行。所以我想獲得如下內容。在第一TR「佔位」行,「34-71069」從imlit.xml不匹配對仲案,2013.xml

<h2>Compliance Programs</h2> 

<tr> 
    <td> 
    <a href="/litigation/admin/2013/34-71069.pdf" target="_blank">34-71069</a> 
    </td> 
    <td>insert date</td> 
    <td>insert respondent</td> 
</tr> 

<tr> 
    <td> 
    <a href="/litigation/admin/2013/34-71069.pdf" target="_blank">34-71069</a> 
    </td> 
    <td>2013-12-12</td> 
    <td>Wayne, Mark M.</td> 
</tr> 

我嘗試以下,但它不工作:

for $x in doc("c:\bob\dev\xquery\imlit.xml")/litigation, 
    $y in 
doc("http://www.sec.gov/about/docket/sec-docket-2013.xml")/secDocket/releaseItem 
return 
if ($x/h2) 
then $x/h2 
else if ($x/ul/li/a = $y/releaseNumber) 
then <tr> <td> {$x/ul/li/a} </td> <td> {data($y/date)} </td> 
<td> {data($y/subjects/subject)} </td> </tr> 
else <tr> <td> {$x/ul/li/a} </td> <td> insert date </td> 
<td> insert respondent </td>  </tr> 

我似乎得到$ x/h2的無限遞歸。我不瞭解條件語句應如何工作以及如何處理查詢。

回答

1

不要單獨建立連接,只需從網站獲取必要的信息。如果沒有可用的文檔,我選擇創建一個虛擬結果,而不是在return子句中應用區分大小來略微分離邏輯和表示。

let $sec := doc("http://www.sec.gov/about/docket/sec-docket-2013.xml") 
for $litigation in doc("C:\bob\dev\xquery\imlit.xml")/litigation/ul/li 
(: Fetch matching document if available, otherwise create dummy result :) 
let $document := $sec/secDocket/releaseItem[releaseNumber = $litigation/a] 
let $document := 
    if ($document) 
    then $document 
    else 
    <releaseItem> 
     <date>insert date</date> 
     <subjects> 
     <subject>insert subject</subject> 
     </subjects> 
    </releaseItem> 
return (
    <tr> 
    <td>{$litigation/a}</td> 
    <td>{data($document/date)}</td> 
    <td>{data($document/subjects/subject)}</td> 
    </tr>, 
    '&#xa;' 
) 
0

我認爲最簡單的答案是在$ y for子句中添加「允許爲空」。這樣,如果沒有匹配,仍然會有一個輸出節點,但$ y綁定到空序列。

for $x in doc("C:\bob\dev\xquery\imlit.xml")/litigation/ul/li, 
    $y allowing empty in doc("http://www.sec.gov/about/docket/sec-docket-2013.xml") 
    /secDocket/releaseItem[releaseNumber = $x/a] 
return (
    <tr> 
     <td> {$x/a} </td> 
     <td> {data($y/date)} </td> 
     <td> {data($y/subjects/subject)} </td> 
    </tr>, 
    '&#xa;') 

可以(只是與文檔調用適用於左巴)在這裏測試:http://try.zorba.io/queries/xquery/PFV2cuMlMvqyUipmtIN3IQZCzJk=

我希望這有助於。

+0

這種運作良好,當有在網上案卷文件相匹配,但是當沒有比賽時,空單元格會有意想不到的語法: ​​ 33-9521 user3342258

+0

我認爲這是因爲默認序列化格式是XML。在你的情況下,你可能想使用HTML序列化格式,它會以HTML方式輸出標籤。如何做到這一點取決於引擎,儘管XQuery提供了一種標準的方法來在引擎中實現它,引擎可能會或可能不會實現。 –