Java解析XML字符串

时间:2014-09-09 13:17:49

标签: java xml

我有一个字符串,我试图从中提取值,为方便起见,我认为将字符串转换为Document然后解析xml将是最好的方法,但我遇到了各种各样的问题!字符串看起来像:

    <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){ }

3 个答案:

答案 0 :(得分: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());
    }
}

答案 1 :(得分: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);

在您可以使用对象&#34; YourModel&#34;阅读你的价值。

答案 2 :(得分:0)

这是一种非常简单的获取节点值的方法,当您知道节点名称且它们不会重复时:

String getXmlNodeValue(String xmlString, String nodeName){
    int start = xmlString.indexOf("<"+nodeName+">") + nodeName.length() + 2;
    int end = xmlString.indexOf("</"+nodeName+">");
    return xmlString.substring(start, end);
}
相关问题