2010-12-14 26 views
0

XML文字列を解析しようとしていますが、タグ名は可変です。情報を知らずに情報を引き出す方法の例は見ていません。たとえば、私はいつも下記の<response>タグと<data>タグを知っていますが、内/外のタグは<employee>からあなたの名前になります。Java - 変数tagnamesのXML文字列を解析しますか?

<?xml version="1.0" encoding="UTF-8"?> 

    <response> 
     <generic> 
      .... 
     </generic> 
     <data> 
      <employee> 
       <name>Seagull</name> 
       <id>3674</id> 
       <age>34</age> 
      </employee> 
      <employee> 
       <name>Robin</name> 
       <id>3675</id> 
       <age>25</age> 
      </employee> 
     </data> 
    </response> 
+0

タグ名が何であるか知っていますが、どういう意味でそれらを処理しようとしていますか?XMLを他のアプリケーションに渡すだけですか? –

+0

"解析する"ということはどういう意味ですか? – Thomas

+0

私はハードコードされたフォーマットを望んでいませんが、むしろレスポンス名の変更に基づいて更新する必要のないクラスを処理します。 –

答えて

0

汎用DOMオブジェクトに解析してそれをトラバースすることができます。たとえば、dom4jを使用してこれを行うことができます。

dom4jのクイックスタートガイドから

:私はプロジェクトで似たような状況を見てきました

public void treeWalk(Document document) { 
    treeWalk(document.getRootElement()); 
} 

public void treeWalk(Element element) { 
    for (int i = 0, size = element.nodeCount(); i < size; i++) { 
     Node node = element.node(i); 
     if (node instanceof Element) { 
      treeWalk((Element) node); 
     } 
     else { 
      // do something.... 
     } 
    } 
} 

public Document parse(URL url) throws DocumentException { 
    SAXReader reader = new SAXReader(); 
    Document document = reader.read(url); 
    return document; 
} 
0

大規模なXMLを処理する場合は、StaxまたはSaxパーサーを使用してXMLを読み取ることができます。すべてのステップ(終わりの要素に達するようなもの)で、データをMapまたはdta構造に入力します。ここでは、タグ名をキーとして保持し、マップ内の値として値を保持します。最後に、このマップを使用して、XMLで情報の適切なエンティティ表現を持つように構築するオブジェクトを特定します。

XMLが小さい場合は、DOMを使用してエンティティオブジェクトを直接ビルドします特定のタグ(employee>のようなもの)を読んだり、XPAThを使ってタグが存在すると予想される箇所にエンティティのヒントを与えたりして、そのオブジェクトを構築してください。