2012-05-24 11 views
11

मैं इस एक्सएमएल फ़ाइल पर एक XPath क्वेरी बनाना चाहते से मेल प्राप्त करें (अंश दिखाया गया है):जावा XPath: सभी तत्वों को एक प्रश्न

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setNamespaceAware(true); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
Document document = builder.parse(new File("E:\\Test branch\\test.wdcomponent")); 
XPathFactory factory = XPathFactory.newInstance(); 
XPath xpath = factory.newXPath(); 

xpath.setNamespaceContext(new NamespaceContext() { 
...(omitted) 

System.out.println(xpath.evaluate(
    "//d:Component/d:Component.UsedModels/d:Core.Reference/@name", 
    document)); 
:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST --> 
<Component xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.Component:2.0" mmRelease="6.30" mmVersion="2.0" mmTimestamp="1180099591892" name="MassimaleContr" package="com.bi.massimalecontr" masterLanguage="it"> 
... 
    <Component.UsedModels> 
     <Core.Reference package="com.test.test" name="MasterModel" type="Model"/> 
     <Core.Reference package="com.test.massimalecontr" name="MassimaleModel" type="Model"/> 
     <Core.Reference package="com.test.test" name="TravelModel" type="Model"/> 
    </Component.UsedModels> 
... 

मैं कोड के इस स्निपेट का उपयोग कर रहा

क्या मैं पाने के लिए उम्मीद कर रहा हूँ:

MasterModel 
MassimaleModel 
TravelModel 

मुझे क्या हो रही है:

MasterModel 

ऐसा लगता है कि केवल पहला तत्व लौटाया गया है। मैं उन सभी घटनाओं को कैसे प्राप्त कर सकता हूं जो मेरी क्वेरी से मेल खाते हैं?

+0

आप इस // // डी: घटक/डी: घटक। उपयोग किए गए मॉडल/@ नाम 'को आजमा सकते हैं, वास्तव में यह जावा में काम नहीं करता है। यह अजगर में काम करता है। :) – Bob

उत्तर

20

आप प्रकार का एक आइटम NodeList

XPathExpression expr = xpath.compile("//Core.Reference"); 
NodeList list= (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
for (int i = 0; i < list.getLength(); i++) { 
    Node node = list.item(i); 
    System.out.println(node.getTextContent()); 
    // work with node 
3

How to read XML using XPath in Java

कि उदाहरण के अनुसार देखें, तो आपको पहले संकलन तो XPath अभिव्यक्ति तो यह अमल मिल जाएगा, यह निर्दिष्ट आप एक nodeset वापस चाहते हैं कि आप परिणाम प्राप्त करना चाहिए जो आप चाहते हैं।