2014-09-09 3 views
-2

У меня есть строка, которую я пытаюсь извлечь из значений. Для удобства я подумал, что преобразование строки в документ и последующий синтаксический анализ xml - лучший способ сделать это, но я сталкиваюсь со всеми виды проблем! Строка выглядит следующим образом:Java parse XML string

<Messagexxx> 
      <Unit> 
       <contact>0</contact> 
       <text>Test Content</text> 
       <date>09-Sep-14 13:56</date> 
       <subject>Test Title</subject> 
      </Unit> 
    </Messagexxx> 

Может кто-то мне точку в правильном пути для достижения своей цели чтения значений из тегов.

Я попытался с помощью следующего фрагмента кода, но я все значения в массиве

null! Document xml = null; Node T = null; try { xml = stringToDom(message); T = xml.getLastChild(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(xml.getFirstChild() != null){ }

+5

Что такое «всевозможные проблемы»? Покажите код, который вы используете, и опишите проблемы, которые у вас есть. – Tomalak

+0

Поиск SAX и DOM –

+0

Привет Я попытался использовать следующий фрагмент, но все значения в массиве равны нулю! Документ xml = null; Узел T = null; try { \t \t \t xml = stringToDom (message); \t \t \t \t T = xml.getLastChild(); \t \t \t} задвижка (SAXException е) { \t \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t \t e.printStackTrace(); \t \t \t} задвижка (ParserConfigurationException е) { \t \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t \t e.printStackTrace(); \t \t \t} поймать (IOException е) { \t \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t \t e.printStackTrace(); \t \t} если (xml.getFirstChild()! = NULL) {} – joebohen

ответ

0

Когда вы пишете строку в текстовый файл, вы можете сначала разобрать его:

private Document parse(String filename){ 
    Document doc = null; 
    try { 
     DOMParser parser = new DOMParser(); 
     parser.parse(filename); 
     doc = parser.getDocument();  
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return doc; 
} 

, а затем вы читаете все текстовые элементы выхода из этого документа:

public void extract (Document doc){ 
    Node root = doc.getDocumentElement(); 
    for (int i = 0; i< root .getChildNodes().getLength(); i++){ 
     Node child = root.getChildNodes().item(i); 
     System.out.println(child.getTextContent()); 
    } 
} 
+0

Почему бы вам написать XML в файл, если вы можете использовать 'DOMParser.parse (Reader)' и передать 'StringReader'? –

0

Использование JAXB Lib: https://jaxb.java.net/

Создать модель из вашего XML и читать:

JAXBContext jaxbContext = JAXBContext.newInstance(YourModel.class); 
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); 

StringReader reader = new StringReader("xml string here"); 
YourModel yourModel= (Person) unmarshaller.unmarshal(reader); 

После ваш может использовать объект "YourModel" читать свою ценность.

+0

Спасибо за ваши комментарии. Я согласен, что выглядит немного длиннее, чтобы сохранить существующую строку в xml-файле, а затем перезагрузить ее, но я не могу найти документацию для добавления JAXB в существующий проект! – joebohen

+0

У вас есть пример с источником здесь: http://www.java2blog.com/2013/02/jaxb-tutorial.html – stacky