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 循环。 .first for 循环用于获取类别名称,第二个 for 循环用于获取子类别标题...总类别为 2...但子类别为 6...您仅获得 2 个子类别标题我的意思是它取决于总类别计数..如果是意味着我该怎么做才能获取所有子类别标题????请给我解决方案以获取所有子类别标题名称...给我任何想法???

4

2 回答 2

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 回答
0

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

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

于 2013-02-22T06:35:56.007 回答