2016-08-12 54 views
1

我需要幫助,節點迭代的Pentaho的XPath

我有格式有數據的XML文件:

<GetReservationRS> 
    <Reservation> 
    <BookingDetails> 
     <RecordLocator>WYCZOE</RecordLocator> 
     <CreationTimestamp>2016-07-28T11:47:00</CreationTimestamp> 
    </BookingDetails> 
    <PassengerReservation> 
     <Passengers> 
     <Passenger id="5" nameType="S" nameId="01.01"> 
      <LastName>BARRERA</LastName> 
      <FirstName>EDITH</FirstName> 
      <Seats /> 
     </Passenger> 
     <Passenger id="6" nameType="S" nameId="02.01"> 
      <LastName>TORRES</LastName> 
      <FirstName>ADRIANA</FirstName> 
      <Seats /> 
     </Passenger> 
     </Passengers> 
    </PassengerReservation> 
    </Reservation>  
</GetReservationRS> 

現在我要輸出到與列名和記錄這樣的一個文本文件(

RecordLocator LastName FirstName 
WYCZOE   BARRERA EDITH 
WYCZOE   TORRES  ADRIANA 

輸出數據昭:與RecordLocator由兩個乘客例)重複看起來像上面的表格。我們如何才能實現在pentaho循環。

感謝

+0

您是否必須使用pentaho來實現這個或者ua你可以自己寫一段代碼嗎?這只是10行代碼在java ... –

+0

我認爲這兩個metods將服務,但最好的形式來實現這一目標,考慮到性能。你有一個代碼的Java或Java腳本示例重新使用?謝謝@ vtd-xml-author –

回答

1

下面是使用XPath它的Java代碼和VTD-XML ...它被編碼爲非常通用的..並且它被測試...

import com.ximpleware.*; 

public class extractData { 
    public static void main(String[] s) throws VTDException { 
     VTDGen vg= new VTDGen(); 
     if (!vg.parseFile("d:\\xml\\table.xml", false)){ 
      System.out.println("xml not parsed correctly"); 
      return; 
     } 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn), 
       ap1=new AutoPilot(vn), 
       ap2=new AutoPilot(vn), 
       ap3=new AutoPilot(vn); 
     ap.selectXPath("/GetReservationRS/Reservation"); 
     ap1.selectXPath("BookingDetails/RecordLocator"); 
     ap2.selectXPath("PassengerReservation/Passengers/Passenger"); 
     System.out.println("RecordLocator \t LastName \t FirstName"); 
     int i=0,j=0,k=-1,l=-1; 
     while((i=ap.evalXPath())!=-1){ 
      String rl = ap1.evalXPathToString(); 
      while((j=ap2.evalXPath())!=-1){ 
       if (vn.toElement(VTDNav.FIRST_CHILD,"LastName")){ 
        k=vn.getText(); 
        vn.toElement(VTDNav.P); 
       } 
       if (vn.toElement(VTDNav.FIRST_CHILD,"FirstName")){ 
        l=vn.getText(); 
        vn.toElement(VTDNav.P); 
       } 

      String s1=""; 
      String s2=""; 
      if (k!=-1){ 
       s1 = vn.toString(k); 
      } 
      if (l!=-1){ 
       s2 = vn.toString(l); 
      } 
      System.out.println(rl+" \t\t "+s1+" \t "+s2); 
      } 
      ap2.resetXPath(); 
     } 
    } 
} 
0

使用Get轉型的XMl步驟

的Xpath -/GetReservationRS /預訂/ PassengerReservation /乘客/乘客

名稱的XPath元素結果類型類型
RecordLocator。 ./../../BookingDetails/RecordLocator字符串的節點值
CreationTimestamp ../../../ BookingDetails/CreationTimestamp的nodeValue字符串的
名字姓氏節點值字符串的
姓姓節點值的字符串

你會得到你的輸出

感謝