在单个xml文档上获取更多属性值

时间:2013-02-22 05:06:55

标签: java android xml-parsing hashmap xmlnodelist

如何在单个文档上阅读更多属性值。

这是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使用下面的代码,我必须运行应用程序,这意味着我得到类别名称但我没有得到子类别标题名称..如何可以我得到子类别标题名称...请给我任何想法..

我宣布了

 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 (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循环。第一个循环获取类别名称,第二个循环获取子类别标题...总类别是2 ...但是子类别是6 ...那我只得到2个子类别标题我的意思它取决于总类别数...如果是的话我怎样才能获得所有子类别标题????请给我解决方案获取所有子类别标题名称...给我任何想法???

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我终于发现你正在使用android.sax包来解析你的XML文件。我想你需要查看Element类的文档。你可以在那里找到一个方法,它将为你提供当前元素的子节点(子节点)。

您还应该查看android.sax包中可用的其他类和接口。特别是,Listener接口将有助于您遍历XML文件的解析树。