2013-02-26 80 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

相关问题