日期:2014-05-18  浏览次数:20746 次

请问,XML命名空间如何定义
我看到不同的书,定义方法不一样

方法一:

<?xml version="1.0"?>
<Book xmlns:lib="http://www.library.com">
<lib:Title>刘德华</lib:Title>
<lib:Author>你好</lib:Author>
</Book>

方法二:

<?xml version="1.0"?>
<lib:Book xmlns:lib="http://www.library.com">
<lib:Title>刘德华</lib:Title>
<lib:Author>你好</lib:Author>
</lib:Book>


两种方法有什么区别吗?为什么不统一呢?








------解决方案--------------------
方法一:里面,Book本身是没有定义名称空间的,只是它的子节点才有的
方法二:里面,Book是有名称空间的,

代表的含义不同。如果使用xpath查节点,写法是不同的,
方法一的xpath写法
/Book/lib:Title

方法二的xpath写法
/lib:Book/lib:Title


所以,上面2段xml代码的写法含义是完全不同的
------解决方案--------------------
通过下面的例子可以清楚地看到差别

String xmlfile1 = "d:\\1.xml";
String xmlfile2 = "d:\\2.xml";
XmlDocument doc1 = new XmlDocument();
doc1.Load(xmlfile1);
XmlNamespaceManager xnm1 = new XmlNamespaceManager(doc1.NameTable);
xnm1.AddNamespace("lib","http://www.library.com");
XmlNode title1 = doc1.SelectSingleNode("/Book/lib:Title",xnm1);
MessageBox.Show(title1.InnerText);

XmlDocument doc2 = new XmlDocument();
doc1.Load(xmlfile2);
XmlNamespaceManager xnm2 = new XmlNamespaceManager(doc1.NameTable);
xnm2.AddNamespace("lib", "http://www.library.com");
XmlNode title2 = doc1.SelectSingleNode("/lib:Book/lib:Title", xnm2);
MessageBox.Show(title2.InnerText);
------解决方案--------------------
孟老师讲的很清楚
------解决方案--------------------
这个我也不知道,跟踪学习下