1

単一のドキュメントでより多くの属性値を読み取るにはどうすればよいですか。

これは 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>

ここでは、カテゴリ名とサブカテゴリのタイトルを表示する必要があります。以下のコードを使用し、アプリを実行する必要があります。これは、カテゴリ名を取得していることを意味しますが、サブカテゴリのタイトル名を取得できませんでした..サブカテゴリのタイトルを取得するにはどうすればよいですか名前... アイデアを教えてください..

私は宣言しました

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

その後、ノードリストを作成し、カテゴリ名にタグを付ける必要があります。

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

また、マップにすべてのカテゴリ名を追加します..だから私はforループを使用しました。

 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);  
        }
  }

ここでカテゴリ名を取得しています...しかし、すべてのサブカテゴリのタイトル名を取得できません...最初の2つのサブカテゴリのタイトル名しか取得できません...私のコードでは何が問題なのですか... forループ内でforループを使用しました。 .最初の for ループでカテゴリ名を取得し、2 番目の for ループでサブカテゴリのタイトルを取得します...合計カテゴリは 2 です...しかし、サブカテゴリは 6 です...つまり、2 つのサブカテゴリのタイトルだけを取得しています。つまり、合計カテゴリに依存します。カウント..はいの場合、すべてのサブカテゴリのタイトルを取得する方法を教えてください????pls は、すべてのサブカテゴリのタイトル名を取得するための解決策を教えてください...アイデアを教えてください???

4

2 に答える 2

0

最終的に、android.saxパッケージを使用して XML ファイルを解析していることがわかりました。Elementクラスのドキュメントを見る必要があると思います。現在の要素のサブノード (子) を提供するメソッドがそこにあります。

android.saxパッケージで利用可能な他のクラスとインターフェースも確認する必要があります。特に、Listener インターフェイスは、XML ファイルの解析ツリーをたどるのに役立ちます。

于 2013-02-22T06:35:56.007 に答える
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);
于 2013-02-22T05:30:25.410 に答える