2011-09-14 97 views
-1

在Java中使用SAX解析器,如何進行基於屬性的解析。java中的XML解析

假設我的XML文件如下,

<?xml version="1.0" encoding="UTF-8"?> 
<employees category="1" type="regular" location="india"> 
    <employee name="xyz" doj="20/12/2001" dob="21/12/1988" salary="12000"></employee> 
    <employee name="xyz" doj="22/12/2003" dob="22/12/1988" salary="18000"></employee> 
    <employee name="xyz" doj="23/12/2002" dob="23/12/1988" salary="15000"></employee> 
    <employee name="xyz" doj="24/12/2003" dob="22/12/1988" salary="17000"></employee> 
    <employee name="xyz" doj="26/12/2005" dob="24/12/1988" salary="12000"></employee> 

</employees> 

我想獲取每個屬性員工元素的值。請幫助我

+11

您提供什麼是無益的。也顯示你的解析代碼沒有意義嗎? –

+1

他也錯過了一個問題。我找不到問號... – WarrenFaith

+0

我編輯了這個問題。請幫我在這 – Som

回答

4

DefaultHandler類提供了一個回調來監聽起始元素,並且它有一個包含Attributes對象的簽名,表示該元素的屬性。

startElement(String uri, String localName, String qName, Attributes attributes)

望着Attributes界面,我看到的方法來幫助你。

  1. 如果你不知道哪個屬性,你有興趣,你想看看所有屬性,你應該使用getLength(),並且做了for-loop在該長度上,看着每個屬性getLocalName(int)getQName(int),您可以致電getValue(int)(所有int都用作索引到屬性列表中)來查找它的值。
  2. 如果您確實知道您感興趣的屬性,則可以簡單地致電getValue(String),傳遞您之後屬性的字符串名稱。

下面是一些示例代碼,可以讓你在給定元素的所有屬性的名稱和值:

public void startElement(String ns, String localName, String qName, Attributes attrs) throws SAXException { 
    for(int i = 0; i < attrs.getLength(); ++i) { 
     String attrName = attrs.getLocalName(i); 
     String attrValue = attrs.getValue(i); 

     //do stuff with name/value 
    } 
} 
1

如果您不習慣它,SAX編程會非常混亂。構造解析器有點棘手,因爲你必須爲抽象接口API而努力。一旦你完成所有工作並註冊你的處理程序,訪問屬性應該很簡單;您的處理程序類需要實現該方法:

public void startElement(String nsUri, String localName, String qName, Attributes attributes) 
     throws SAXException    

屬性值在該名稱的arg中可用。