2013-02-22 5 views
1

단일 문서에서 더 많은 속성 값을 읽으려면 어떻게해야합니까?단일 XML 문서에서 더 많은 속성 값 가져 오기

이것은 XML 샘플 XML 파일 : 여기

<Categories> 
<Category name="Title 1" 
<SubCategory> 
    <subcategory title="subtitle 1" id="1" ></subcategory> 
    <subcategory title="subtitle 2" id="2" ></subcategory> 
    <subcategory title="subtitle 3" id="3" ></subcategory> 
    </SubCategory> 
    </Category> 
    <Category> 
    <Category name="Title 2" 
<SubCategory> 
    <subcategory title="subtitle 4" id="4" ></subcategory> 
    <subcategory title="subtitle 5" id="5" ></subcategory> 
    <subcategory title="subtitle 6" id="6" ></subcategory> 
    </SubCategory> 
    </Category> 
    </Categories> 

내가 코드를 아래에 사용한 title.i 카테고리 이름과 하위 범주를 표시해야하고 내가 카테고리 이름을 점점 오전 의미 응용 프로그램을 실행해야하지만, 내가 하위 카테고리 제목 이름을 얻을 수 name..how 하위 카테고리 제목을하지 않았다 ... pls는 내가 근래 그 후

static String KEY_CATEGORY = "Categories"; 
    static final String KEY_TITLE = "Category"; 
    static final String KEY_ARTICLE = "SubCategory"; 

선언 한

.. 나에게 어떤 아이디어를 줄 e를 사용하여 노드 목록을 작성하고 카테고리 이름에 태그를 지정하십시오.

NodeList nl = doc.getElementsByTagName(KEY_TITLE); 
    NodeList nl1 = doc.getElementsByTagName(KEY_ARTICLE); 

지도에 모든 카테고리 이름을 추가하십시오. for 루프를 사용했습니다. 뭐가 잘못 내 코드에서 ... 내가 가지고 ... ... 단지 처음 2 하위 제목 이름을 얻고 여기에

for (int i = 0; i < nl.getLength(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      map.put(KEY_TITLE,(e.getAttribute("name"))); 
     for (int j = 0; j < nl1.getLength(); j++) { 

       map.put(KEY_ARTICLE,((Element)nl1.item(i)).getAttribute("title")); 

     } 
      songsList.add(map); 
     } 
    } 

카테고리 이름을 얻고있다 ...하지만 난 모든 하위 범주 제목 이름을 얻을 수 없다 for 루프 내에서 루프를 위해 사용됩니다 .. 첫 번째 루프는 카테고리 이름을 얻고 두 번째 루프는 하위 카테고리 제목을 얻습니다 ... 총 카테고리는 2이지만 하위 카테고리는 6 ... thats y는 2 개의 하위 카테고리 제목 만 얻습니다. 나는 그것이 총 범주 수에 달려 있음을 의미합니다. 그렇다면 모든 하위 카테고리 제목을 얻는 방법은 무엇입니까? pls는 모든 하위 카테고리 제목 이름을 얻는 방법에 대한 해결책을 제공합니다 ... 저에게 어떤 아이디어라도 주시겠습니까 ???

+0

_ "하위 범주 제목 이름을 가져올 수 없습니다."_ 음, ''요소를 가져 오는 코드는 어디에 있습니까? 'title' 속성을 얻는 코드는 어디에 있습니까? 나는 위의 어느 쪽도 보지 않는다. –

+0

Java의 XML 라이브러리에 대해 많이 알지 못합니다. NodeList에서 각 Element의 하위 노드를 가져와야하는 것처럼 들립니다. –

+0

@MattBall pls 내 업데이트 된 질문 읽기 및 솔루션을 제공 – user2098063

답변

0

내가 마지막으로 당신이 당신의 XML 파일을 구문 분석하는 android.sax 패키지를 사용하고 있는지 알아 냈어. 난 당신이 Element 클래스에 대한 문서를 봐야 할 것 같아요. 현재 요소의 하위 노드 (하위)를 제공 할 메소드를 찾을 수 있습니다.

또한 android.sax 패키지에서 사용할 수있는 다른 클래스와 인터페이스를 살펴 봐야합니다. 특히 Listener 인터페이스는 XML 파일의 구문 분석 트리를 탐색하는 데 유용합니다.

0

난 당신이
가 참조 AXIOM으로 쉽게 할 수 있다고 생각 : http://ws.apache.org/axiom/userguide/userguide.html
예 :

XMLStreamReader    parser        = XMLInputFactory.newInstance().createXMLStreamReader(new StringBufferInputStream(responseXML)); 
OMElement     documentElement      = new StAXOMBuilder(parser).getDocumentElement(); 

AXIOMXPath     oTA_HotelAvailRSXPath    = new AXIOMXPath("/soap:Envelope/soap:Body/wmHotelAvailResponse/OTA_HotelAvailRS"); 

oTA_HotelAvailRSXPath.addNamespace("soap",  "http://schemas.xmlsoap.org/soap/envelope/"); 
oTA_HotelAvailRSXPath.addNamespace("xsi",  "http://www.w3.org/2001/XMLSchema-instance"); 
oTA_HotelAvailRSXPath.addNamespace("xsd",  "http://www.w3.org/2001/XMLSchema"); 

OMElement     oTA_HotelAvailRSOmElement   = (OMElement)oTA_HotelAvailRSXPath.selectSingleNode(documentElement); 
OMElement     errorsOmElement      = (OMElement)new AXIOMXPath("Errors").selectSingleNode(oTA_HotelAvailRSOmElement); 

String strType  = (String) new AXIOMXPath("string(Text/@Type)").selectSingleNode(errorsOmElement); 
String strCode  = (String) new AXIOMXPath("string(Text/@Code)").selectSingleNode(errorsOmElement); 
String strDescription = (String) new AXIOMXPath("string(Text)").selectSingleNode(errorsOmElement); 
+0

나는 these.please에 대한 안드로이드 애플 리케이션의 모든 샘플 자습서를 제공하지 않습니다 ... – user2098063

+0

나는 안드로이드와 작동하지 않았습니다. 그러나 이것은 자바에서 나를 여러 번 구해주었습니다. "android"와 마찬가지로 더 나은 태그를 붙이십시오. – namalfernandolk

+0

질문은 Android와 관련이 없습니다. 위의 코드는 원래 질문과는 완전히 별개로 적절한 라이브러리 JAR 파일을 포함하면 Android 앱에서와 동일하게 작동합니다. –