2011-08-10 21 views
3

XPathを使用してXML文字列を解析しようとしていますが、null値のみが返されています。誰かが私が下に示すコードで間違っているかもしれない考えを持っていますか?XPathを使用してXML文字列データを解析する際の問題

public static void main(String[] args) { 
    String content = "<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></Images></imagesXML>"; 
    InputSource source = new InputSource(new StringReader(content)); 
    XPath xPath = XPathFactory.newInstance().newXPath(); 
    NodeList list = null; 
    try { 
     list = (NodeList) xPath.evaluate("//URL128[@Value]", source, 
       XPathConstants.NODESET); 
    } catch (Exception ex) { 
     System.out.println(ex.getMessage()); 
    } 
    for (int i = 0; i < list.getLength(); i++) { 
     System.out.println(list.item(i)); 
    } 
} 

のSystem.outからの出力は 'の値が= [URL128:ヌル]' ですが、それは私が抽出しようとしているURLでなければなりません:http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg

ご協力いただきありがとうございます。

答えて

5

何がこのことから、あなたのXPath評価文を変更しようとした場合:これに

list = (NodeList)xPath.evaluate("//URL128[@Value]", 
    source, XPathConstants.NODESET); 

list = (NodeList) xPath.evaluate("//URL128/@Value", 
    source, XPathConstants.NODESET); 
+0

ありがとうございました。 Value = "http://cachens.corbis.com/CorbisImage/thumb/15/53/42/15534232/42-15534232.jpg" XPath評価を使用してValue = partを削除する方法はありますか? – c12

+0

ahhh、それにSystem.out.println(list.item(i).getTextContent()); – c12

+0

@ c12:確かに、文字列の本体で表現されないことがわかっているなら、 'String#replace'または' String#replaceAll'を使って行うことができます。 - 決して気にしないで、あなたの方法はより良いです! –

1

注:

  • すべてURL123のリストを返します//URL128[@Value]表現Value属性を持つ要素
  • これらのリストのいずれも文字列を含むソース

URL128要素からValue属性のリストを返す//URL128/@Value発現。 DOMタイプが含まれています。あなたのソースには1つのURL128要素しかありませんが、NodeListを求めています。以下を使用して簡略化することができます。

String url = xPath.evaluate("//URL128/@Value", source); 
関連する問題