未知的XML文件到pojo

时间:2014-09-10 19:17:49

标签: java xml jaxb pojo

有没有办法获取未知的架构xml文件并将值,标签等从xml文件转换为pojo?我看了jaxb,看起来最好的方法就是你已经知道了xml架构。所以基本上,我希望能够通过使用arraylist来解析xml中的标记,将每个标记放入其自己的对象中。我还没有完全理解jaxb可以或者有更好的工具可以做到这一点,还是实现起来太难了?

1 个答案:

答案 0 :(得分:1)

希望这可以帮助您了解您的情况!

public static void dumpAllNodes( String path ) throws Exception {
    DocumentBuilder parser = 
      DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document doc = parser.parse(new File(path));
    NodeList nodes = doc.getElementsByTagNameNS( "*", "*" );
    for( int i = 0; i < nodes.getLength(); i++ ){
        Node node = nodes.item( i );
        System.out.println( node.getNodeType() + " " + node.getNodeName() );
    }
}

NodeList节点按文档顺序(开始标记)包含所有元素节点。因此,元素中包含的元素将在该列表中,都是相同的。要获取节点的属性,请调用

NamedNodeMap map = node.getAttributes();

可以获得节点的文本内容
String text = node.getTextContent();

请注意,调用它会返回子树的所有元素中的文本。

OTOH,你可以打电话

Element root = doc.getDocumentElement();

获取根元素,然后通过调用Element.getChildNodes()递归地下降树并逐个处理节点(Element,Attr,Text,...)。另请注意,Node.getParentNode()返回父节点,因此您可以通过重复调用root来为平面列表构建每个节点的XPath。

它完全取决于您对结果数据结构的期望(您称之为ArrayList)。例如,如果您创建包含一个属性映射和另一个子元素映射的通用元素类型(MyElement),则第二个映射必须是

Map<String,List<MyElement>> name2elements

提供重复的元素 - 这使得元素的访问只发生一次有点尴尬。

我希望我已经说明了通用XML解析的问题,这不是JAXB可以帮助您的任务。