2012-02-03 2 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

+0

@JavaCake aNode относится к узлу, для которого вы хотите получить атрибут. В вашем случае это узел, ссылающийся на элемент «сообщение». –

+0

Не возражаете ли вы дать пример реализации на основе моего кода? Я не могу точно определить, как это делается. – JavaCake

1

Я играл с Apache Xerces для разбора DOM. Но это были ужасные задачи. Если можно, взгляните на jsoup.

Итак, если ваш вопрос есть ответ в Jsoup, было бы:

node.attr("status") 
+0

Я сожалею, что не сделал этого, но, к сожалению, сейчас я не могу многое изменить, приложение очень большое. – JavaCake

Смежные вопросы