有很多问题需要最好的XML解析器,我更感兴趣的是什么是最像Groovy for Java的XML解析器?
我想:
SomeApiDefinedObject o = parseXml( xml );
for( SomeApiDefinedObject it : o.getChildren() ) {
System.out.println( it.getAttributes() );
}
最重要的是我不想为每种类型的XML节点创建类,我宁愿只将它们作为字符串处理,并且构建XML不会不需要任何转换器或任何东西,只需要一个已定义的简单对象
如果您使用过Groovy XML解析器,您将知道我在说什么
或者,对我来说,只使用Java中的Groovy会不会更好?
答案 0 :(得分:4)
您可以使用Sun Java Streaming XML Parser
快速完成此操作 FileInputStream xmlStream = new FileInputStream(new File("myxml.xml"));
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream);
while(reader.hasNext()){
reader.next();
for(int i=0; i < reader.getAttributeCount(); i++) {
System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i));
}
}
答案 1 :(得分:3)
我想无耻地插入我编写的小型开源库,以便在Java中解析XML变得轻而易举。
查看Jinq2XML。
一些示例代码如下:
Jocument joc = Jocument.load(urlOrStreamOrFileName);
joc.single("root").children().each(new Action() {
public void act(Jode j){
System.out.println(j.name() + ": " + j.value());
}
});
答案 2 :(得分:1)
看起来您想要的只是一个简单的DOM API,例如dom4j提供的。标准库中实际上已经有一个DOM API(org.w3c.dom
包),但它只是API,所以你需要一个单独的实现 - 不妨使用像dom4j更先进的东西。
答案 3 :(得分:1)
使用Groovy。
您的主要目标似乎是能够通过对象访问器以“自然”方式访问DOM,而Java不会让您在不定义类的情况下执行此操作。 Groovy,因为它是“鸭子类型”,将允许你这样做。
不使用Groovy的唯一原因是:(1)XML处理是应用程序的一小部分,和/或(2)您必须与可能希望严格使用Java编程的其他人合作。
无论你做什么,不决定“只是将它们作为字符串处理”。 XML不是一种简单的格式,除非你知道里面和外面的规范,否则你不太可能正确。这意味着您的XML将被符合规范的解析器拒绝。
答案 4 :(得分:0)
我强烈推荐JAXB。非常适合XML&lt; - &gt; Java对象框架。
答案 5 :(得分:0)
曾经有一个非常小而简单的XML解析器叫做NanoXML。它似乎不再被开发,但它仍然可以在http://devkix.com/nanoxml.php
获得答案 6 :(得分:0)
我对XStream有很好的体验。它相当快,将序列化和反序列化Java到/从XML没有架构和很少的代码It Just Works™。它构建的Java对象层次结构将直接镜像您的XML。
答案 7 :(得分:0)
我使用Dozer和Castor获取OTOM(对象到对象映射)。
答案 8 :(得分:-1)
尝试此代码!!!!
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.*;
import javax.xml.*;
import java.io.File;
import java.io.IOException;
public class XmlDemo {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException
{
// Get Document Builder
// Get Document Builder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//Build Document
Document document = builder.parse(new File("D:/test.xml"));
//Normalize the XML Structure; It's just too important !!
document.getDocumentElement().normalize();
//Here comes the root node
Element root = document.getDocumentElement();
System.out.println(root.getNodeName());
//Get all employees
NodeList nList = document.getElementsByTagName("company");
System.out.println(nList.getLength());
System.out.println("============================");
visitChildNodes(nList);
}
//This function is called recursively
private static void visitChildNodes(NodeList nList)
{
Node tempNode = null;
// System.out.println("The Number of child nodes are " + (nList.getLength()) );
if(!(nList.getLength() == 1)) {
// System.out.println("The Number of child nodes are " + (nList.getLength()) );
// for (int temp = 0; temp < nList.getLength(); temp++)
// {
// Node node = nList.item(temp);
// if (node.getNodeType() == Node.ELEMENT_NODE)
// {
// System.out.println();
// System.out.println("Node Name = " + node.getNodeName() + ";");
// }
// }
}
for (int temp = 0; temp < nList.getLength(); temp++)
{
Node node = nList.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE)
{
System.out.println();
System.out.println("Node Name = " + node.getNodeName() + ";");
// if (node.hasAttributes()) {
// // get attributes names and values
// NamedNodeMap nodeMap = node.getAttributes();
// for (int i = 0; i < nodeMap.getLength(); i++)
// {
// tempNode = nodeMap.item(i);
// System.out.println(" Attr : " + tempNode.getNodeName()+ "; Value = " + tempNode.getNodeValue());
// }
//
// }else {
//// System.out.println("No Attributes");
// }
if (node.hasChildNodes()) {
NodeList nodeList = node.getChildNodes();
if((node.getChildNodes().getLength()/2)>0) {
System.out.println("This node has child nodes "+ (node.getChildNodes().getLength()/2));
System.out.println("Child nodes of : [ " + node.getNodeName() + " ] =>");
for(int k = 0;k < nodeList.getLength(); k++) {
Node n = nodeList.item(k);
if (n.getNodeType() == Node.ELEMENT_NODE)
{
if((k<(nodeList.getLength()))) {
System.out.println(" [ " + n.getNodeName() + " ] =>" );
if (n.hasAttributes()) {
// // get attributes names and values
NamedNodeMap nodeMap = n.getAttributes();
for (int i = 0; i < nodeMap.getLength(); i++)
{
tempNode = nodeMap.item(i);
System.out.println(" Attr : " + tempNode.getNodeName()+ "; Value = " + tempNode.getNodeValue() + " ]");
}
}else {
// System.out.println("No Attributes");
}
}else if((k==(nodeList.getLength()))) {
System.out.println(" [ " + n.getNodeName() + " ]");
}
}
}
System.out.println(" ]");
}
visitChildNodes(node.getChildNodes());
}
}
}
}
}
enter code here