2016-05-31 108 views
0

這裏是我的XML文檔的樣子 -Java的XML DOM文檔getElementsByTagNameNS返回空節點列表

<Key1> 
     <ns3:a>true</ns3:a> 
     <ns3:b>1.0</ns3:b> 
     <ns3:c> 
      <ns3:north>13</ns3:north> 
      <ns3:south>113</ns3:south> 
      <ns3:west>114</ns3:west> 
      <ns3:east>172</ns3:east> 
     </ns3:c> 
    </Key1> 
    <Key2> 
     <ns3:SubKey> 
      <ns3:a>Hello World</ns3:a> 
      <ns3:b>0.9</ns3:b> 
      <ns3:c> 
       <ns3:north>99</ns3:north> 
       <ns3:south>17</ns3:south> 
       <ns3:west>65</ns3:west> 
       <ns3:east>11</ns3:east> 
      </ns3:c> 
     </ns3:SubKey> 
    </Key2> 

這裏是我的Java代碼 -

private Document domDocument; 
public XmlDomParser(byte[] inputByteFile) { 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    try { 
     DocumentBuilder documentBuilder = dbFactory.newDocumentBuilder(); 
     domDocument = documentBuilder.parse(new ByteArrayInputStream(inputByteFile)); 
    } catch (ParserConfigurationException | SAXException | IOException e) { 
     e.printStackTrace(); 
    } 
} 


public NodeList getAllNodesByTagName(String tagName) { 
    return domDocument.getElementsByTagNameNS("*",tagName); 
} 

當標籤名= 「A」,由getAllNodes返回的節點列表是空的。但是,如果我嘗試domDocument.getElementsByTagName(tagName),我會得到2個元素的預期列表。

+0

是用正確的名稱空間聲明形成的xml嗎? –

+0

是的。事實證明,我需要啓用dbFactory.setNamespaceAware(true); – eechpeech

回答

0

原來我需要啓用dbFactory.setNamespaceAware(true);