解析XML碰到的问题,请帮忙指教,谢谢

ATGC 2005-12-13 04:58:22
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,
不知道为什么?帮忙指教,谢谢。。
...全文
200 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATGC 2005-12-16
  • 打赏
  • 举报
回复
up
ATGC 2005-12-15
  • 打赏
  • 举报
回复
不明白
ATGC 2005-12-15
  • 打赏
  • 举报
回复
up
appleangle 2005-12-14
  • 打赏
  • 举报
回复
上面的代码里有问题.把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);
appleangle 2005-12-14
  • 打赏
  • 举报
回复
<?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());
}
}
看看这个对你有帮助吗???
appleangle 2005-12-14
  • 打赏
  • 举报
回复
问题应该在这句上吧
Node node = doc.selectSingleNode("/entrySet/author");
这里你的entrySet有xmlns...
你查查吧.我理解的很浅.只是有这个想法...没怎么太搞过这个
ATGC 2005-12-14
  • 打赏
  • 举报
回复
up
ATGC 2005-12-14
  • 打赏
  • 举报
回复
up
infowain 2005-12-14
  • 打赏
  • 举报
回复
xmlns="net:sf:psidev:mi",这个不是命名空间,这个是schema的开头。
ATGC 2005-12-14
  • 打赏
  • 举报
回复
to infowain(infowain)
谢谢,可能是我写错了,应该是name属性
不是这个问题

我的问题是:为什么有了命名空间,就不能读了
infowain 2005-12-14
  • 打赏
  • 举报
回复
你的xml里面根本就没有id属性,代码2应该也读不到的吧
ATGC 2005-12-14
  • 打赏
  • 举报
回复
不太明白,好像是加了属性
可是这个entrySet后面的字符串会变的
我不清楚这个字符串的含义
我自己也找找资料,先
ATGC 2005-12-13
  • 打赏
  • 举报
回复
我前面表示的不太清楚
是这样

代码1读test1.xml 不能读到内容

代码2读test2.xml 可以读到内容

两者的区别是test1.xml的entrySet标签后面有一串字符串,
有解决办法吗?我必须读test1。XML


jgsfy 2005-12-13
  • 打赏
  • 举报
回复
学习
帮顶
ATGC 2005-12-13
  • 打赏
  • 举报
回复
up

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧