在Java中读取和解析任意的xml结构?

问题描述:

XML解析的新手段。我需要读取一组任意XML文件。他们都应该是POX,像以下格式:在Java中读取和解析任意的xml结构?

<someThing> 
    <property1>blah blah blah</property1> 
    <property2>blah blah blah</property2> 
</someThing> 

或以下:

<thingList> 
    <items> 
    <otherThing> 
     <prop3>blah blah blah</prop3> 
     <prop4>blah blah blah</prop4> 
    </otherThing> 
    <otherThing> 
     <prop3>blah blah blah</prop3> 
     <prop4>blah blah blah</prop4> 
    </otherThing> 
    </items> 
</thingList> 

所以我不知道该元素的名称预先。我的问题是,如果有任何Java库在XML中处理读取,而不是通过节点的名称或节点的属性,而是通过结构?

+3

你是什么意思的结构?你有没有试过SAX或DOM? – Adrian 2012-02-10 06:09:26

使用getRootElement方法可以获取xml文件的根元素。获取根元素后,必须指定要获取的元素的xml路径。我已经使用这个为“items/otherThing/prop3”写了,你会得到你的prop3标签值。

File fXmlFile = new File("test.xml"); 
    SAXBuilder builder = new SAXBuilder(); 
    Document document = builder.build(fXmlFile); 
    Element beans = document.getRootElement(); 

    Element dbUrlElementHost = (Element) XPath.selectSingleNode(beans,"items/otherThing/prop3"); 
    dbUrlElementUsername.getValue()+""; 
+0

这是最健壮的答案。谢谢。 – Slamice 2012-02-11 17:03:47

我认为DOM是最好的选择,如果你想要通过节点。您可以遍历每个节点,它是子节点的列表。这是好的example得到一个想法。

您可以使用getChildNodes()来获取整个节点列表,以visitNode()这样的方法递归地调用它。该API可在org.w3c.dom包中找到。

首先调用文档的根节点的getChildNodes()通过我提到然后visitNode()内再次调用visitNode()每个在当前节点的子节点的visitNode()方法。

您可以通过getNodeType()检查类型,如果它是Node.TEXT_NODE访问getNodeValue()以获取该标记的值。