我有以下xml文件:
<?xml version="1.0"?>
<company>
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
我正在使用sax解析器从此文件中获取信息。有没有办法从元素中获取完整的内容?
我说我确定了“员工”这个元素,我该怎样才能得到:
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
答案 0 :(得分:1)
您应该使用DOM解析器。您可以像这样加载内容:
final org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new java.io.File("myFile.xml");
现在你可以得到像这样的员工元素:
final org.w3c.dom.NodeList staff = doc.getElementsByTagName("staff");
最后,您可以将第一个staff元素的内容写入stdout,如下所示:
javax.xml.transform.TransformerFactory.transform(
new javax.xml.transform.dom.DOMSource(staff.item(1)), //Assuming you want to print only the second <staff> element.
new javax.xml.transform.stream.StreamResult(System.out));
答案 1 :(得分:0)
如果您不仅需要内容而且还需要标记信息,我建议您使用DOM。 DOM允许您获取NODE信息,如子节点等。
答案 2 :(得分:0)
dom解析器在这里是合适的,但是如果你想,你可以使用XPath
- 或者在库中搜索XML。以下是为您执行此操作的方法示例:
try{
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
Document doc = builder.parse("YourPath-ToXML-File");
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();
XPathExpression expression = xpath.compile("/company/staff[2]/*");
NodeList nodes = (NodeList) expression.evaluate(doc, XPathConstants.NODESET);
for(int i = 0;i<nodes.getLength();i++){
System.out.println(nodes.item(i).getNodeName());
System.out.println(nodes.item(i).getTextContent());
}
} catch(Exception exception){
exception.printStackTrace();
}
答案 3 :(得分:0)
你应该研究JAXB,它非常容易使用。你需要的只是一些带注释的bean。在您的情况下,公司的豆和员工的一个豆。它可以处理编组和解组。