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