2012-01-20 16 views
7

मैं निम्न XML उदाहरण है:प्राप्त कर रहा है नेमस्पेस

<?xml version="1.0" encoding="UTF-8"?> 
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" 
    xmlns:custom="http://example.com/opensearchextensions/1.0/"> 
    <ShortName>Test</ShortName> 
    <Description>Testing....</Description> 
    <Url template="whatever" type="what" /> 
    <Query custom:color="blue" role="example" /> 
</OpenSearchDescription> 

मेरी चिंता का विषय Query तत्व के साथ है। इसमें एक नेमस्पेस विशेषता है और, जावा में, आपको मूल्य पुनर्प्राप्त करने के लिए namespaceURI की आवश्यकता होगी।

मेरा प्रश्न है: मैं रूट तत्व से नामस्थानों की सूची कैसे प्राप्त करूं (इस मामले में, OpenSearchDescription तत्व)? मैं विशेषता, उपसर्ग और नामस्थान यूआरआई चाहता हूं जिसे मैं Query पर अनुरोध करने के लिए उपयोग कर सकता हूं।

धन्यवाद।

पीएस: मैं जावा में मानक, जावा एसई में मानक का उपयोग कर रहा हूं। यदि संभव हो तो मैं XPath पर जाने के लिए तैयार हूं। आवश्यकता यह है कि केवल जावा मानक API का उपयोग करने की आवश्यकता है।

उत्तर

14

यह आपको शुरू हो सकता है, factory.setNamespaceAware(true) नामस्थान डेटा प्राप्त करने की कुंजी है।

public static void main(String[] args) throws ParserConfigurationException, SAXException, 
     IOException 
{ 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse(new File(args[0])); 
    Element root = doc.getDocumentElement(); 
    //prints root name space 
    printAttributesInfo((Node) root); 

    NodeList childNodes = root.getChildNodes(); 
    for (int i = 0; i < childNodes.getLength(); i++) 
    { 
     printAttributesInfo(childNodes.item(i)); 
    } 
} 

public static void printAttributesInfo(Node root) 
{ 
    NamedNodeMap attributes = root.getAttributes(); 
    if (attributes != null) 
    { 
     for (int i = 0; i < attributes.getLength(); i++) 
     { 
      Node node = attributes.item(i); 
      if (node.getNodeType() == Node.ATTRIBUTE_NODE) 
      { 
       String name = node.getNodeName(); 
       System.out.println(name + " " + node.getNamespaceURI()); 
      } 
     } 
    } 
} 
+1

धन्यवाद, मेरे पास एक ही कोड है। यह बात हमेशा जांचना है कि क्या 'Node.getNamespaceURI()' रिटर्न 'शून्य 'नहीं है। इस तरह मैं जांचता हूं। यह काम करता हैं। –

0

मुझे नहीं पता कि यह उचित तरीका है लेकिन आप संभवतः OpenSearchDescription पर विशेषताओं को लेना चाहते हैं, यह पता लगाएं कि javax.xml.XMLConstants में स्थित स्थिरांक की सहायता से वे नामस्थान घोषणाएं हैं या नहीं। XMLNS_ATTRIBUTE निरंतर "xmlns" होना चाहिए। आप सभी विशेषताओं को पार कर सकते हैं और उस मूल्य से शुरू होने वाले सभी विशेषताओं को अपने NameSpaceUri के रूप में सहेज सकते हैं।

मुझे लगता है कि आपको NameSpaceContext पर भी एक नज़र रखना चाहिए। मुझे नहीं पता कि आप अपना दस्तावेज़ कैसे लोड करते हैं, लेकिन यदि आप XMLStreamReader का उपयोग कर रहे हैं तो आप उस से NameSpaceContext पुनर्प्राप्त कर सकते हैं, जिसमें आपको आवश्यक जानकारी है। Here आप देख सकते हैं कि आप NameSpaceContext को अन्य तरीकों से पुनर्प्राप्त कर सकते हैं।

उम्मीद है कि मदद करता है।

संबंधित मुद्दे