Java解析XML字符串

Java解析XML字符串,java,xml,Java,Xml,我有一个字符串,我正试图从中提取值,为了方便起见,我认为将字符串转换为文档,然后解析xml是最好的方法,但我遇到了各种各样的问题!字符串如下所示: <Messagexxx> <Unit> <contact>0</contact> <text>Test Content</text> <da

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

    <Messagexxx>
             <Unit> 
                <contact>0</contact> 
                <text>Test Content</text>
                <date>09-Sep-14 13:56</date>
                <subject>Test Title</subject>
             </Unit>
     </Messagexxx>
有人能告诉我正确的方法来实现我从标签中读取值的目标吗

我曾尝试使用以下代码段,但数组中的所有值都是


空!文档xml=null;节点T=null;尝试{xml=StringToDomainMessage;T=xml.getLastChild;}捕获SAXException e{//TODO自动生成的捕获块e.printStackTrace;}捕获解析配置异常e{//TODO自动生成的捕获块e.printStackTrace;}捕获IOException e{//TODO自动生成的捕获块e.printStackTrace;}ifxml.getFirstChild!=null{}

将字符串写入文本文件时,可以首先解析它:

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());
    }
}
使用JAXB库:

从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读取您的值。

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

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

什么是各种各样的问题?显示您使用的代码,并描述您遇到的问题。搜索SAX和DOMHi我尝试使用以下代码段,但数组中的所有值都为空!文档xml=null;节点T=null;尝试{xml=StringToDomainMessage;T=xml.getLastChild;}捕获SAXException e{//TODO自动生成的捕获块e.printStackTrace;}捕获解析配置异常e{//TODO自动生成的捕获块e.printStackTrace;}捕获IOException e{//TODO自动生成的catch block e.printStackTrace;}ifxml.getFirstChild!=null{}您不应该在注释中使用重要代码,因为1它不可读2不是每个人都在阅读注释,因此您降低了获得答案的机会。因此,与其将其作为注释发布,不如使用[]选项,并将其包含在您的帖子中。重复-当您可以使用DOMParser.parseReader并传递StringReader时,您究竟为什么要将XML写入文件?感谢您的评论,我同意将现有字符串保存到XML文件然后重新加载看起来有点冗长,但我找不到添加JAXB的文档到现有项目!这里有一个源代码示例: