2013-02-22 96 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可以獲得子類別標題名稱......請給我任何的想法..

我宣佈

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 (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 ...但子類別是6 ...這就是我得到2個子類別的標題我的意思是它取決於總類別count ..如果是意味着我怎麼能得到所有子類別的標題???請給我解決方案獲取所有子類別的標題名稱......給我任何想法?

+0

_「我無法獲得子類別標題名稱__,那麼獲取''元素的代碼在哪裏?獲得'title'屬性的代碼在哪裏?我看不到上面。 – 2013-02-22 05:09:14

+0

我不太瞭解Java中的XML庫。這聽起來像你需要獲取NodeList中每個元素的子節點。 – 2013-02-22 05:09:30

+0

@MattBall請閱讀我更新的問題,並給我解決方案 – user2098063 2013-02-22 05:20:12

回答

0

我終於想通了,你正在使用的android.sax包解析XML文件。我認爲您需要查看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

我不知道這些。請給我任何示例教程在Android應用程序... – user2098063 2013-02-22 05:38:21

+0

我沒有與Android的工作。但是這讓我在Java中多次拯救了我。用「android」更好地標記這個問題 – namalfernandolk 2013-02-22 06:04:01

+0

這個問題實際上與Android沒有任何關係。如果您包含適當的庫JAR文件,上述代碼將完全按照Android應用程序的原樣工作,這與原始問題完全不同。 – 2013-02-22 06:08:33