有如下的XML字符串:
<?xml version="1.0" encoding="UTF-8"?>
<?Label SINFON|RATE|328|SUCCESS ?>
<RateHeader xmlns="rate.fidelio.2.0" rateStatus="ACTIVE" yieldStatus="NONE">
<hotelCode>SINFON</hotelCode>
<chainCode>COL</chainCode>
<rateClass/>
<RateCategory>
<catDescription>Rack rates</catDescription>
<category>RAK</category>
</RateCategory>
<rateCode>WHL01</rateCode>
<startSell>2013-12-02</startSell>
<endSell>2015-01-22</endSell>
<advancedBookingDays>2</advancedBookingDays>
<displayText>Tour Series</displayText>
<folioText>Room Charge</folioText>
<shortInfo>tour series/min. 5 tours</shortInfo>
<minLos>3</minLos>
<maxLos>20</maxLos>
<rhythm>W</rhythm>
<packages>BRF</packages>
<packages>IBF</packages>
<marketCode>RAC</marketCode>
<sourceCode>COL</sourceCode>
<commission>0</commission>
<foreignCurrencyDepartmentCode/>
<departmentCode>100</departmentCode>
<weekendDepartmentCode>100</weekendDepartmentCode>
<rateBucket>LOW</rateBucket>
</RateHeader>
要求從中讀取rateCode節點的值,實現方法如下:
public static String getRateCodeFromXmlString(String xmlString)
{
String rateCodeMessage="";
StringReader read = new StringReader(xmlString);
//創建新的輸入源SAX 解析器將使用 InputSource 對象來確定如何讀取 XML 輸入
InputSource source = new InputSource(read);
//創建一個新的SAXBuilder
SAXBuilder saxbBuilder = new SAXBuilder();
try
{
//通過輸入源構造一個Document
Document doc = saxbBuilder.build(source);
//取的根元素
Element root = doc.getRootElement();
List<?> node = root.getChildren();
for (int i = 0; i < node.size();i++)
{
Element element=(Element)node.get(i);
if(element.getName().equals("rateCode")){
rateCodeMessage=element.getText();
}
}
return rateCodeMessage;
}
catch
(JDOMException e) {
e.printStackTrace();
return "";
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
有如下XML字符串:
<?xml version="1.0" encoding="UTF-8"?>
<?Label EXPSD|RTAV|10000281|SUCCESS?>
<RtavMessage xmlns="rtav.fidelio.1.0">
<HotelReference hotelCode="EXPSD"/>
<DailyInventories>
<DailyInventory datum="2014-08-10">
<RoomTypeInventories>
<RoomTypeInventory roomType="1KESS" generic="0" physicalRooms="22" roomTypeOverbook="0" outOfOrder="6">
<Tentative count="0" blockCount="0" resvCount="0"/>
<Definite count="6" blockCount="0" resvCount="6"/>
</RoomTypeInventory>
<RoomTypeInventory roomType="1KSTS" generic="0" physicalRooms="81" roomTypeOverbook="0" outOfOrder="16">
<Tentative count="0" blockCount="0" resvCount="0"/>
<Definite count="14" blockCount="0" resvCount="14"/>
</RoomTypeInventory>
<RoomTypeInventory roomType="2BSVS" generic="0" physicalRooms="34" roomTypeOverbook="0" outOfOrder="6">
<Tentative count="0" blockCount="0" resvCount="0"/>
<Definite count="12" blockCount="0" resvCount="12"/>
</RoomTypeInventory>
</RoomTypeInventories>
</DailyInventory>
<DailyInventory datum="2014-08-11">
<RoomTypeInventories>
<RoomTypeInventory roomType="1KSTS" generic="0" physicalRooms="81" roomTypeOverbook="0" outOfOrder="16">
<Tentative count="0" blockCount="0" resvCount="0"/>
<Definite count="14" blockCount="1" resvCount="13"/>
</RoomTypeInventory>
</RoomTypeInventories>
</DailyInventory>
</DailyInventories>
</RtavMessage>
要求獲取roomType屬性的值,如果有多個,則以空格間隔,不獲取重複的值。實現代碼如下:
public static String getRoomTypeFromXmlString(String xmlString)
{
String roomTypeMessage="";
StringReader read = new StringReader(xmlString);
//創建新的輸入源SAX 解析器將使用 InputSource 對象來確定如何讀取 XML 輸入
InputSource source = new InputSource(read);
//創建一個新的SAXBuilder
SAXBuilder saxbBuilder = new SAXBuilder();
try
{
//通過輸入源構造一個Document
Document doc = saxbBuilder.build(source);
//取的根元素
Element root = doc.getRootElement();
List<?> node = root.getChildren();
for (int i = 0; i < node.size();i++)
{
Element element=(Element)node.get(i);
List<?> subNode = element.getChildren();
for(int j=0;j<subNode.size();j++)
{
Element subElement=(Element)subNode.get(j);
List<?> subNode2 = subElement.getChildren();
for(int k=0;k<subNode2.size();k++)
{
Element subElement2=(Element)subNode2.get(k);
List<?> subNode3 = subElement2.getChildren();
for(int m=0;m<subNode3.size();m++)
{
Element subElement3=(Element)subNode3.get(m);
String temp=subElement3.getAttributeValue("roomType");
String temp2=roomTypeMessage.indexOf(temp)>=0?"":(temp+" ");
roomTypeMessage+=temp2;
}
}
}
}
return roomTypeMessage;
}
catch
(JDOMException e) {
e.printStackTrace();
return "";
} catch (IOException e) {
e.printStackTrace();
return "";
}
}