2012-02-10 9 views
0

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> 

だから私は事前に要素の名前を知ることができません。私の質問は、ノード名やノードの属性ではなく、構造によってXMLで読み込みを処理するJavaライブラリがあるかどうかです。

+3

構造体とはどういう意味ですか? SAXやDOMを試してみましたか? – Adrian

答えて

1

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

0

私は、ノードで移動したい場合、DOMは最適なオプションだと思います。各ノードとその子ノードのリストを反復することができます。アイデアを得るにはここに良いexampleがあります。

0

getChildNodes()を使用すると、ノードのリスト全体を取得できます。これは、visitNode()のような方法で再帰的に呼び出すことができます。このAPIは、org.w3c.domパッケージで利用できます。

まず、私が述べたvisitNode()メソッドを介してドキュメントのルートノードにgetChildNodes()を呼び出してから、visitNode()以内にあなたは再び現在のノードで子ノードのそれぞれにvisitNode()を呼び出します。

タイプを確認するにはgetNodeType()、それがNode.TEXT_NODEの場合はgetNodeValue()にアクセスしてそのタグの値を取得します。

関連する問題