2011-08-10 7 views
1

私は以下のXML応答を受け取りました。取得するのはURL128 xml要素の値が得られるように解析する必要があります。 Javaでこれを達成する最も効率的な方法に関するアイデアはありますか?Javaを使用して特定の要素のXMLを解析する

<?xml version="1.0" encoding="utf-8"?> 
    <imagesXML> 
     <Images> 
      <Image> 
       <ImageUID Scope="Public" Type="Guid" Value="{7f2535d0-9a41-4997-9694-0a4de569e6d9}"/> 
       <CorbisID Scope="Public" Type="String" Value="42-15534232"/> 
       <Title Scope="Public" Type="String" Value="Animal"/> 
       <CreditLine Scope="Public" Type="String" Value="© Robert Llewellyn/Corbis"/> 
       <IsRoyaltyFree Scope="Public" Type="Boolean" Value="False"/><AspectRatio Scope="Public" Type="String" Value="1.500000"/> 
       <URL128 Scope="Public" Type="String" Value="http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg"/> 
      </Image> 
      <Image> 
       <ImageUID Scope="Public" Type="Guid" Value="{7f2535d0-9a41-4997-9694-0a4de569e6d9}"/> 
       <CorbisID Scope="Public" Type="String" Value="42-15534232"/> 
       <Title Scope="Public" Type="String" Value="Animal"/> 
       <CreditLine Scope="Public" Type="String" Value="© Robert Llewellyn/Corbis"/> 
       <IsRoyaltyFree Scope="Public" Type="Boolean" Value="False"/><AspectRatio Scope="Public" Type="String" Value="1.500000"/> 
       <URL128 Scope="Public" Type="String" Value="http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg"/> 
      </Image> 
     </Images> 
    </imagesXML> 
+0

場合、すべてのXMLのthatsその後、SAXう大丈夫、私はいつも、「効率的」とはグルーヴィーxmlslurper – Shahzeb

+1

を見て人々を頼むあなたは高速意味ですか、またはあなたは最小の努力/コードを意味するのですか?高速の場合は、SAXまたはStAXの解析(またはその要素を取得するためのカスタム解析のみ)をお勧めします。少なくとも努力すれば、DOM解析やXPath評価を提供するサードパーティ製のlibでも可能です。 –

+0

パフォーマンスを大幅に犠牲にすることなくコーディングするための最小限の努力 – c12

答えて

4

のJavaのXPath APIを使用するのは簡単です:

String xmlData = "<test><one><URL128 myAttribute='value' /></one></test>"; 
InputSource source = new InputSource(new StringReader(xmlData)); //or use your own input source 

XPath xPath = XPathFactory.newInstance().newXPath(); 

NodeList list = (NodeList)xPath.evaluate("//URL128", source, XPathConstants.NODESET); 
List<Element> elements = new ArrayList<Element>(list.getLength()); 
for (int i = 0; i < list.getLength(); i++) 
{ 
    elements.add((Element)list.item(i)); 
} 
+0

偉大な例のprunge!あなたの例でjavax.xml.bind.Elementを使用していますか?私は要素オブジェクトのコレクションから日付を抽出する方法がわかりませんでした。私はおそらく間違ったインポートを持っています... – c12

+0

@ c12 org.w3c.dom.Element – prunge

2

使用SAX、および要素名が「URL128」であれば、あなたは、3つの属性ScopeTypeValueを抽出カスタムオブジェクトに保存し、このオブジェクトを追加するようstartElementメソッドを実装List

これは簡単で高速です。

関連する問題