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