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

用C#怎样获得这样一个带命名空间的xml文档的指定节点?
xml文档:
<?xml version="1.0" encoding="gb2312" ?>
- <ct:UpdateDetails Date="20050601 08:00" xmlns:ct="http://www.aaa.com/">
  - <!-- 下面是具体内容
  -->
  - <details title="员工">
  - <Content>
  <name>张三</name>
  <sex>男</sex>
  <home>北京市海淀区中关村</home> 
  </Content>
  </details>
</ct:UpdateDetails>

我想获得sex节点的值“男”,怎样实现呢?

------解决方案--------------------
XmlDocument XmlDoc = new XmlDocument(); 建立一个XMLDocument对象
XmlDoc.Load(inputXMLFile); 读取MXl文件
XmlNode node = XmlDoc.SelectSingleNode("/details");截取details节点
XmlNode n=node.SelectSingleNode("sex"); //SelectSingleNode()截取节点
Object e =n.InnerXml ;

------解决方案--------------------
C# code

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("XMLFile1.xml");
            XmlNamespaceManager xmlNS = new XmlNamespaceManager(xmlDoc.NameTable);
            string prefix = "ct";
            string ns = "http://www.aaa.com/";
            xmlNS.AddNamespace(prefix,ns);

            string xpath = prefix + ":UpdateDetails/details/Content/sex";
            XmlNode node = xmlDoc.SelectSingleNode(xpath, xmlNS);

------解决方案--------------------
C# code

//xml查询带命名空间
XmlDocument doc = new XmlDocument();
//doc.Load("C:\\nso.xml");
doc.Load("C:\\nso.xml");
NameTable xmt = new NameTable();
//xmt.Add("ns0");
XmlNamespaceManager xnm = new XmlNamespaceManager(xmt);
xnm.AddNamespace("ns0", "http://blog.csdn.net/zhzuo");
XmlNode node = doc.SelectSingleNode("//ns0:NewDataSet/ns0:Table1", xnm);
            


//如果是默认命名空间,可以添加别名进行查询。
 XmlDocument doc = new XmlDocument();
//doc.Load("C:\\nso.xml");
doc.Load("C:\\m.xml");
NameTable xmt = new NameTable();           
XmlNamespaceManager xnm = new XmlNamespaceManager(xmt);
//默认命名空间添加nn别名。
xnm.AddNamespace("nn", "http://blog.csdn.net/zhzuo");
XmlNode node = doc.SelectSingleNode("//ns0:NewDataSet/ns0:Table1", xnm);

------解决方案--------------------
//need a alias even if it is the default namespace and use it to access the node

xnm.AddNamespace("m", "http://hi.csdn.net/mohammed");

XmlNode node = doc.SelectSingleNode("//m:NewDataSet/m:Table1", xnm);