2014-10-29 68 views
2

我有一個問題,認爲從深層返回值的XML結構。 首先,這裏的XML代碼:Java中的XML:從特定元素獲取值

<?xml version="1.0" encoding="UTF-8" ?> <log> <published>2014-03-28T15:28:36.646Z</published> <actor> <objectType>person</objectType> <id>e1b8948f-321e-78ca-d883-80500aae71b5</id> <displayName>anonymized</displayName> </actor> <verb>update</verb> <object> <objectType>concept</objectType> <id>a1ad6ace-c722-ffa9-f58e-b4169acdb4e3</id> <content>time</content> </object> <target> <objectType>conceptMap</objectType> <id>4b8f69e3-2914-3a1a-454e-f4c157734bd1</id> <displayName>my first concept map</displayName> </target> <generator> <objectType>application</objectType> <url>http://www.golabz.eu/content/go-lab-concept-mapper</url> <id>c9933ad6-dd4a-6f71-ce84-fb1676ea3aac</id> <displayName>ut.tools.conceptmapper</displayName> </generator> <provider> <objectType>ils</objectType> <url>http://graasp.epfl.ch/metawidget/1/b387b6f</url> <id>10548c30-72bd-0bb3-33d1-9c748266de45</id> <displayName>unnamed ils</displayName> </provider> </log>

我發現這裏的#1的方法,它與交易(How to retrieve element value of XML using Java?):

protected String getString(String tagName, Element element) { 
    NodeList list = element.getElementsByTagName(tagName); 
    if (list != null && list.getLength() > 0) { 
     NodeList subList = list.item(0).getChildNodes(); 

     if (subList != null && subList.getLength() > 0) { 
      return subList.item(0).getNodeValue(); 
     } 
    } 

    return null; 
} 

我的問題是,我不知道如何使用該方法獲得特定的ID(或其他元素的值),而不使用明確的預定義方法(我想傳遞我在方法頭本身中查找的ID)。 如果我使用getString("id", document.getDocumentElement)它只返回「e1b8948f-321e-78ca-d883-80500aae71b5」-ID。如果我想要得到來自<object>的子節點ID「a1ad6ace-c722-ffa9-f58e-b4169acdb4e3」,該怎麼辦?

回答

1

您可以爲此使用XPath表達式。

XPathFactory xPathFactory = XPathFactory.newInstance(); 
XPath xPath = xPathFactory.newXPath(); 
XPathExpression xPathExpression = xPath.compile("//object/id"); 

// this should return one "id" node 
NodeList idNodelist = (NodeList) xPathExpression.evaluate(document, XPathConstants.NODESET); 
Node idNode = idNodelist.item(0); 
System.out.println(idNode.getTextContent()); 
+0

之前從未聽說過XPath。我如何訪問內部的值?如果我寫'idNodeList.item(0).getNodeValue()',它只返回「null」。 – 2014-10-29 19:41:06

+0

@ X-Fate更新。您要檢索的文本是「id」元素節點的子節點。 – manouti 2014-10-29 19:48:08

+0

太棒了!通過'getTextContent',返回值。謝謝!問題解決了......我猜...:p – 2014-10-29 19:48:41