test1.xml<?xml version="1.0" encoding="utf-8"?>
<entrySet xmlns="net:sf:psidev:mi"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="net:sf:psidev:mi http://psidev.sourceforge.net/mi/xml/src/MIF.xsd"
          level="1" version="1">
  <author name="James" location="UK">James Strachan</author>
  <author name="Bob" location="US">Bob McWhirter</author>
</entrySet>test2.xml
<?xml version="1.0" encoding="utf-8"?>
<entrySet>
  <author name="James" location="UK">James Strachan</author>
  <author name="Bob" location="US">Bob McWhirter</author>
</entrySet>代码1
File f = new File("test1.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Node node = doc.selectSingleNode("/entrySet/author");
String id = node.valueOf("@id");
System.out.println(id);代码2
File f = new File("test2.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Node node = doc.selectSingleNode("/entrySet/author");
String id = node.valueOf("@id");
System.out.println(id);我的XML文件test1.xml的root节点entrySet后面的内容如果去掉test2.xml,我的程序就可以
如果和test1.xml那样,我就取不到author的id,
不知道为什么?帮忙指教,谢谢。。

解决方案 »

  1.   

    我前面表示的不太清楚
    是这样代码1读test1.xml  不能读到内容代码2读test2.xml  可以读到内容两者的区别是test1.xml的entrySet标签后面有一串字符串,
    有解决办法吗?我必须读test1。XML
      

  2.   

    问题应该在这句上吧
    Node node = doc.selectSingleNode("/entrySet/author");
    这里你的entrySet有xmlns...
    你查查吧.我理解的很浅.只是有这个想法...没怎么太搞过这个
      

  3.   

    <?xml version="1.0" encoding="UTF-8"?>
    <rdf:RDF xmlns:rdf="http://www.w3c.org/1999/02/22-synax-ns#" 
    xmlns:dc="http://purl.org/metadata/dublin-core#" 
    xmlns:dced="http://purl.org/metadata/dced-v1#">
    <rdf:Description ID="0000000001">
    <dc:title>aaa</title>
    <dc:creator>bbb</creator>
    <dc:suject>ccc</suject>
    <dced:audience>ddd</audience>
    <dced:level>3</level>
    </rdf:Description>
    </rdf:RDF>使用的 Java 代码如下:
    private void generateDocument(String prm_filename){
    org.dom4j.Document document = org.dom4j.DocumentHelper.createDocument();Element rootElement = document.addElement("rdf:RDF");rootElement.addAttribute("xmlns:rdf","http://www.w3c.org/1999/02/22-synax-ns#");
    rootElement.addAttribute("xmlns:dc","http://purl.org/metadata/dublin-core#");
    rootElement.addAttribute("xmlns:dced","http://purl.org/metadata/dced-v1#");Element rdfDescriptionElement = rootElement.addElement("rdf:Description");
    rdfDescriptionElement.addAttribute("ID", "0000000001");Element titleElement = rdfDescriptionElement.addElement("dc:title");
    titleElement.setText("bbb");Element creatorElement = rdfDescriptionElement.addElement("dc:creator");
    creatorElement.setText("ccc");Element sujectElement = rdfDescriptionElement.addElement("dc:suject");
    sujectElement.setText("ddd");Element audienceElement = rdfDescriptionElement.addElement("dced:audience");
    audienceElement.setText("eee");Element levelElement = rdfDescriptionElement.addElement("dced:level");
    levelElement.setText(3);try{
    OutputFormat format = OutputFormat.createPrettyPrint();
    XMLWriter output = new XMLWriter(new FileWriter( new File(prm_filename)), format);
    output.write( document );
    output.close();
    }catch(IOException e){
    System.out.println(e.getMessage());
    }
    }
    看看这个对你有帮助吗???
      

  4.   

    上面的代码里有问题.把NameSpace注册方法改一下
    NameSpace ns1 = new NameSpace("xmlns:rdf","http://www.w3c.org/1999/02/22-synax-ns#");
    NameSpace ns2 = new NameSpace("xmlns:dc","http://purl.org/metadata/dublin-core#");
    NameSpace ns3 = new NameSpace("xmlns:dced","http://purl.org/metadata/dced-v1#");
    rootElement.add(ns1);
    rootElement.add(ns2);
    rootElement.add(ns3);
      

  5.   

    不太明白,好像是加了属性
    可是这个entrySet后面的字符串会变的
    我不清楚这个字符串的含义
    我自己也找找资料,先
      

  6.   

    你的xml里面根本就没有id属性,代码2应该也读不到的吧
      

  7.   

    to infowain(infowain)
    谢谢,可能是我写错了,应该是name属性
    不是这个问题我的问题是:为什么有了命名空间,就不能读了
      

  8.   

    xmlns="net:sf:psidev:mi",这个不是命名空间,这个是schema的开头。