2013-04-25 3 views
0

JDOM을 사용하여 다음 XML 문자열 응답을 읽으려고하지만 구문 분석하는 방법을 모르고 있습니까? 저를 도와주세요? 나는 구문 분석 다음 코드를 시도하고있다 :Xml namspace JDOM을 사용하여 구문 분석

org.jdom.Element rootNode = document.getRootElement(); 

List<?> list = rootNode.getChildren("QuotationResponse"); 
for(int i = 1 ; i <= list.size() ; i++) { 
    Element node = (Element) list.get(i); 
    String documentDate = node.getAttribute("documentDate"); 
    String transactionType = node.getAttribute("transactionType"); 
} 

XML :

<?xml version="1.0" encoding="UTF-8"?> 

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><VtEnvelope 

xmlns="un:vtinc:o-series:tps:6:0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<Login><UserName>user</UserName> 
<Password>abcd</Password> 
</Login> 
<QuotationResponse documentDate="2011-03-24" transactionType="SALE"><Customer><Destination taxAreaId="1230000"><City>Dallas</City> 
<MainDivision>TX</MainDivision> 
<SubDivision>Chester</SubDivision> 
<PostalCode>75038</PostalCode> 
<Country>USA</Country> 
</Destination> 
</Customer> 
<SubTotal>1000.0</SubTotal> 
<Total>1060.0</Total> 
<TotalTax>60.0</TotalTax> 
<LineItem lineItemId="1" lineItemNumber="1" taxDate="2013-04-25"><Product productClass="product class attribute value">product code value</Product> 
<Quantity>1.0</Quantity> 
<FairMarketValue>1000.0</FairMarketValue> 
<UnitPrice>1000.0</UnitPrice> 
<ExtendedPrice>1000.0</ExtendedPrice> 
<Taxes taxResult="TAXABLE" taxType="SALES" situs="DESTINATION" taxCollectedFromParty="BUYER"><Jurisdiction jurisdictionLevel="STATE" jurisdictionId="3051">Texas</Jurisdiction> 
<CalculatedTax>60.0</CalculatedTax> 
<EffectiveRate>0.06</EffectiveRate> 
<Taxable>1000.0</Taxable> 
<Imposition impositionType="General Sales and Use Tax">Sales and Use Tax</Imposition> 
<TaxRuleId>121</TaxRuleId> 
</Taxes> 
<TotalTax>60.0</TotalTax> 
</LineItem> 
</QuotationResponse> 
</VtEnvelope></S:Body></S:Envelope> 

답변

1

당신은 사용하는 네임 스페이스 별 getChildren() 메소드가 필요합니다. "vtinc : O-시리즈 : 유엔 TPS : 6 : 0"당신이 원하는 네임 스페이스는

Namespace ns = Namespace.getNamespace("un:vtinc:o-series:tps:6:0"); 
List<?> list = rootNode.getChildren("QuotationResponse", ns); 

당신이 JDOM 2.x를 사용하고 있던 경우, 두 번째 줄 수 :

Namespace ns = Namespace.getNamespace("un:vtinc:o-series:tps:6:0"); 
List<Element> list = rootNode.getChildren("QuotationResponse", ns); 

및 귀하의 모든 일 수 있습니다 :

Namespace ns = Namespace.getNamespace("un:vtinc:o-series:tps:6:0"); 
for(Element node : rootNode.getChildren("QuotationResponse", ns)) { 
    String documentDate = node.getAttribute("documentDate"); 
    String transactionType = node.getAttribute("transactionType"); 
} 

편집 : 그래도 문제가 있습니다. 나는 지금 여러 가지가 잘못된 것을 보았습니다.

JDOM 2.0.4를 사용해야합니다. 그것은 타입 캐스팅에 도움이 될 것입니다. 어떻게 든 String 객체에 Attribute 객체를 넣고 있습니다. 그것은 컴파일이 불가능합니다!

String documentDate = node.getAttributeValue("documentđate") 

마지막으로, QuotationResponse는하지만 S의, 하지 루트 요소의 자식입니다 : 다음 바디 ....와 VtEncelope. 올바른 네임 스페이스로 액세스해야합니다. 문서 구조를 올바르게 만들어야합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 여전히 null 값을 얻고 있습니다. 입력 사항을 더 알려 주실 수 있습니까? 도와 줘서 고마워. –

+0

rolfl! 노력과 친절한 협조에 진심으로 감사드립니다. 나는 아직도 문제의 한가운데있다. 나는 오직 뿌리와 몸의 아이들을 얻을 수 있습니다. XML에서 모든 요소와 텍스트를 가져 오려고합니다. 내 주요 질문은 왜 내가 QuotationResponse의 아이들을 얻을 수 없다는 것입니다? 자녀와 고객 요소의 텍스트를 얻는 방법? 부탁을 들어 나를 구해줘! 감사 ........ –