2014-06-24 70 views
3

我們有一個目錄將搜索結果作爲XML文檔返回。在java中訪問xml元素中的屬性

<directory.person> 
    <person netid="" pidm="" student="" affiliate=""> 
     <picture>no</picture> 
     <name>...</name> 
    </person> 

我試圖解析和使用下面的代碼在Java閱讀:

try{ 
     DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();           
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xml)); 
     Document doc = db.parse(is); 
     NodeList nodes = doc.getElementsByTagName("person"); 

     for(int i = 0;i < nodes.getLength(); i++){ 
      Element element = (Element) nodes.item(i); 
      NodeList pidm = element.getElementsByTagName("@pidm"); 
      Element line = (Element)pidm.item(0); 
      value = getCharacterDataFromElement(line); 
      if(value.compareTo("Dana")==0 || value=="Dana") 
       out.println(value); 
     } 
    } 
    catch(Exception e){ 
     out.println(e); 
    } 

我遇到的問題是與實際訪問的是馬存保機構變量我的第二行「爲「循環。我不知道該怎麼做。基本上,我需要通過pidm輸出,因爲這是每個返回人員的唯一標識符。我知道jstl會更容易,但是這個人不想這樣做。

回答

1

您的Element循環第一行中的對象應該已經是<person />元素。所以,你應該能夠抓住由屬性:

for(int i = 0;i < nodes.getLength(); i++){ 
    Element element = (Element) nodes.item(i); 

    // retrieve the attribute, then get the value 
    Attr pidm = element.getAttributeNode("pidm"); 
    String pidmString = pidm.getValue(); 

    // or get the attribute directly 
    String pidmDirectString = element.getAttribute("pidm"); 

    ... // the rest of your code 
} 

Element Javadoc

+0

太棒了!這工作。我正在查看API文檔,但我大多忽略了這種方法。謝謝! – jordaniac89

+0

@ jordaniac89:很高興幫助:) – mikeho

2

org.w3c.dom.Element有許多方法來訪問元素的屬性。這裏

最簡單的情況下,將調用element.getAttribute("pidm");

這將讓你的給定屬性。

否則,你可以瀏覽Element其他getAttribute...方法,以方便您使用。

API here

1

你幾乎有:

for(int i = 0;i < nodes.getLength(); i++){ 
    Element element = (Element) nodes.item(i); 
    value = elem.getAttributeValue("pidm"); 
} 
1

如果我明白你的問題正確的,「馬存保機構」是一個屬性。如果你需要得到它,請使用element.getAttribute(「pidm」);