2013-02-26 106 views
0

我正在從Java DOM中正確調用getAttributeNS()(和其他NS方法)時出現問題。首先,這裏是我的示例XML文檔:什麼是使用Java DOM調用getAttributeNS的正確方法?

<?xml version="1.0" encoding="UTF-8"?> 
<bookstore> 
    <book xmlns:c="http://www.w3schools.com/children/" xmlns:foo="http://foo.org/foo" category="CHILDREN"> 
     <title foo:lang="en">Harry Potter</title> 
     <author>J K. Rowling</author> 
     <year>2005</year> 
     <price>29.99</price> 
    </book> 
</bookstore> 

這裏是我使用DOM,並呼籲getAttributeNS小的Java類:

package com.mycompany.proj; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.DocumentBuilder; 
import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Element; 
import java.io.File; 

public class AttributeNSProblem 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      File fXmlFile = new File("bookstore_ns.xml"); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(fXmlFile); 

      System.out.println("Root element: " + doc.getDocumentElement().getNodeName()); 

      NodeList nList = doc.getElementsByTagName("title"); 
      Element elem = (Element)nList.item(0); 
      String lang = elem.getAttributeNS("http://foo.org/foo", "lang"); 
      System.out.println("title lang: " + lang); 
      lang = elem.getAttribute("foo:lang"); 
      System.out.println("title lang: " + lang); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

當我打電話getAttributeNS( 「http://foo.org/foo」, 「郎」)它會返回一個空的String。我也嘗試過getAttributeNS(「foo」,「lang」),結果相同。

什麼是正確的方式來檢索由命名空間限定的屬性的值?

謝謝。

+0

哦,上帝,W3Schools的... – crush 2013-02-26 21:09:43

回答

1

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();後,立即加入dbFactory.setNamespaceAware(true);

+0

這奏效了。謝謝。如果DOM'NS'方法上的Javadoc像getAttributeNS()提到的那樣,那將會很好。 – 2013-02-27 17:01:33

相關問題