2012-05-02 1 views
1

웹 수확을 사용하여 일부 웹 페이지 "스크랩"을 수행하고 있습니다. 나는 조직 할 가치가있는 표를 가지고있다. 테이블은 매우 간단합니다. 그러나 테이블의 열 머리글을 사용하여 각 열의 데이터 형식을 결정해야합니다. 웹 수확의 예와 같이 테이블은, 내가 XQuery를 사용하고Web-Harvest는 테이블 열 머리글별로 데이터 유형을 결정합니다.

<table> 
    <tr class="header"> 
    <td>Name</td> 
    <td>Age</td> 
    <td>Gender</td> 
    </tr> 
    <tr> 
    <td>Bill</td> 
    <td>25</td> 
    <td>M</td> 
    </tr> 
    <tr> 
    <td>Emily</td> 
    <td>31</td> 
    <td>F</td> 
    </tr> 
</table> 

.... 이런 걸보고, 나는 값 인덱스에 의해 또한 속성을 (클래스, ID를 사용하여 얻을하는 방법을 알고 등)하지만,이 경우에, 나는 ..., 열이 나이가 나는이 형태의 XML 출력하려면 ... 등이며, 1 열 이름입니다을 결정하는 방법을 잘 모르겠어요

<person> 
    <name>Bill</name> 
    <age>25</age> 
    <gender>M</gender> 
</person> 
<person> 
    <name>Emily</name> 
    <age>31</age> 
    <gender>F</gender> 
</person> 

다른 게시물에서이 코드 조각을 보았지만 어떻게 작동하는지 정확히 알 수는 없습니다.

//tr[td[.="Jim"]]/td[count(ancestor::table/thead/tr/th[.="Credit"]/preceding-sibling::*)+1] 

각 행에 대해 조상 (parent?)이 참조되어 해당 열 머리글을 찾는 것처럼 보입니다. 그 외에는, 나는 길을 잃었다. 추가 정보가 있으면 매우 유용합니다. 사전에

감사합니다.

답변

1

이 XQuery 표현식 :

<persons> 
    <person> 
     <Name> 
     <td>Bill</td> 
     </Name> 
     <Age> 
     <td>25</td> 
     </Age> 
     <Gender> 
     <td>M</td> 
     </Gender> 
    </person> 
    <person> 
     <Name> 
     <td>Emily</td> 
     </Name> 
     <Age> 
     <td>31</td> 
     </Age> 
     <Gender> 
     <td>F</td> 
     </Gender> 
    </person> 
</persons> 
:

<table> 
    <tr class="header"> 
    <td>Name</td> 
    <td>Age</td> 
    <td>Gender</td> 
    </tr> 
    <tr> 
    <td>Bill</td> 
    <td>25</td> 
    <td>M</td> 
    </tr> 
    <tr> 
    <td>Emily</td> 
    <td>31</td> 
    <td>F</td> 
    </tr> 
</table> 

가 원하는, 올바른 결과을 생산 : 제공된 XML 문서에 적용

<persons> 
    { 
    let $names := /*/tr[1]/td 
    return 
     for $tr in /*/tr[position() ge 2] 
      return 
      <person> 
       { for $i in 1 to count($tr/td) 
        return 
        element {$names[$i]} {$tr/td[$i]} 
       } 
      </person> 
    } 
    </persons>