2012-02-03 102 views
3

我目前解析XML,但我不是很清楚如何解析「消息」的「狀態」屬性:解析的XML屬性與DOM解析器

<message status="test"> <text>sometext</text> <msisdn>stuff</msisdn> </message> 

下面是代碼,我已經切斷一切都是不必要的:

NodeList nodeLst = doc.getElementsByTagName("message"); 

for (int s = 0; s < nodeLst.getLength(); s++) { 

     Node fstNode = nodeLst.item(s); 

     if (fstNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element fstElmnt = (Element) fstNode; 

       NodeList numberNmElmntLst = fstElmnt 
       .getElementsByTagName("msisdn"); 
       Element numberNmElmnt = (Element) numberNmElmntLst.item(0); 
       NodeList numberNm = numberNmElmnt.getChildNodes(); 
       String phoneNumber = ((Node) numberNm.item(0)) 
       .getNodeValue().substring(2); 

       NodeList txtNmElmntLst = fstElmnt 
       .getElementsByTagName("text"); 
       Element txtNmElmnt = (Element) txtNmElmntLst.item(0); 
       NodeList txtNm = txtNmElmnt.getChildNodes(); 
       String text = ((Node) txtNm.item(0)).getNodeValue(); 

       NodeList rcvNmElmntLst = fstElmnt 
       .getElementsByTagName("received"); 
       Element rcvNmElmnt = (Element) rcvNmElmntLst.item(0); 
       NodeList rcvNm = rcvNmElmnt.getChildNodes(); 
       String recievedDate = ((Node) rcvNm.item(0)).getNodeValue(); 
      } 
}  

任何人都可以指導我如何做到這一點?

在此先感謝。

回答

11

Node.getAttributes()

NamedNodeMap attributes = fstElmnt.getAttributes(); 

for (int a = 0; a < attributes.getLength(); a++) 
{ 
     Node theAttribute = attributes.item(a); 
     System.out.println(theAttribute.getNodeName() + "=" + theAttribute.getNodeValue()); 
} 

如果使用XPATH檢索數據,您可以避免穿越。閱讀this tutorial

+0

感謝您的回覆,你能解釋一下屬性陽極? – JavaCake 2012-02-03 17:58:22

+0

@JavaCake aNode引用您想要爲其檢索屬性的節點。在你的情況下,Node是指「message」元素。 – 2012-02-03 18:01:18

+0

你介意根據我的代碼給出實現示例嗎?我無法確切地確定它是如何完成的。 – JavaCake 2012-02-03 18:13:50

1

我一直在玩Apache Xerces解析DOM。但這是可怕的任務。如果可以的話,看看jsoup

所以,如果你的問題在Jsoup一個答案,那就是:

node.attr("status") 
+0

我很遺憾我沒有那麼做,但不幸的是我現在變化不大,應用程序非常大。 – JavaCake 2012-02-03 17:50:17