节点迭代 Pentaho xpath
Node iteration 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 duplicated 两个 Passenger 案例):
RecordLocator LastName FirstName
WYCZOE BARRERA EDITH
WYCZOE TORRES ADRIANA
输出数据应如上所示 table。我们如何在pentaho.
中实现循环
谢谢
在转换中使用 Get XMl 步骤
Xpath - /GetReservationRS/Reservation/PassengerReservation/Passengers/Passenger
字段
名称 XPath 元素结果类型类型
RecordLocator ../../../BookingDetails/RecordLocator 字符串的节点值
CreationTimestamp ../../../BookingDetails/CreationTimestamp 字符串的节点值
LastName LastName 字符串的节点值
FirstName 字符串的 FirstName 节点值
你会得到你的输出
谢谢
下面是使用 XPath 和 VTD 的 java 代码-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();
}
}
}
我需要帮助,
我有一个 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 duplicated 两个 Passenger 案例):
RecordLocator LastName FirstName
WYCZOE BARRERA EDITH
WYCZOE TORRES ADRIANA
输出数据应如上所示 table。我们如何在pentaho.
中实现循环谢谢
在转换中使用 Get XMl 步骤
Xpath - /GetReservationRS/Reservation/PassengerReservation/Passengers/Passenger
字段
名称 XPath 元素结果类型类型
RecordLocator ../../../BookingDetails/RecordLocator 字符串的节点值
CreationTimestamp ../../../BookingDetails/CreationTimestamp 字符串的节点值
LastName LastName 字符串的节点值
FirstName 字符串的 FirstName 节点值
你会得到你的输出
谢谢
下面是使用 XPath 和 VTD 的 java 代码-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();
}
}
}