2012-04-04 79 views
0

我有这样的XML在http://localhost/file.xmlXML - 如何使用命名空间前缀

<?xml version="1.0" encoding="utf-8"?> 
<val:Root xmlns:val="http://www.hw-group.com/XMLSchema/ste/values.xsd"> 
<Agent> 
<Version>2.0.3</Version> 
<XmlVer>1.01</XmlVer> 
<DeviceName>HWg-STE</DeviceName> 
<Model>33</Model> 
<vendor_id>0</vendor_id> 
<MAC>00:0A:DA:01:DA:DA</MAC> 
<IP>192.168.1.1</IP> 
<MASK>255.255.255.0</MASK> 
<sys_name>HWg-STE</sys_name> 
<sys_location/> 
<sys_contact> 
HWg-STE:For more information try http://www.hw-group.com 
</sys_contact> 
</Agent> 
<SenSet> 
<Entry> 
<ID>215</ID> 
<Name>Home</Name> 
<Units>C</Units> 
<Value>27.7</Value> 
<Min>10.0</Min> 
<Max>40.0</Max> 
<Hyst>0.0</Hyst> 
<EmailSMS>1</EmailSMS> 
<State>1</State> 
</Entry> 
</SenSet> 
</val:Root> 

我想从我的C#代码阅读:

static void Main(string[] args) 
     { 
      var xmlDoc = new XmlDocument(); 
      xmlDoc.Load("http://localhost/file.xml"); 
      XmlElement root = xmlDoc.DocumentElement; 
      // Create an XmlNamespaceManager to resolve the default namespace. 
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable); 
      nsmgr.AddNamespace("val", "http://www.hw-group.com/XMLSchema/ste/values.xsd"); 

      XmlNodeList nodes = root.SelectNodes("/val:SenSet/val:Entry"); 
      foreach (XmlNode node in nodes) 
      { 
       string name = node["Name"].InnerText; 
       string value = node["Value"].InnerText; 

      Console.Write("name\t{0}\value\t{1}", name, value); 
      } 
      Console.ReadKey(); 

     } 
    } 

问题是该节点是空的。我知道在阅读XML时这是一个常见的新手问题,仍然无法解决我所做的错误,可能是命名空间“val”的一些问题?

+0

我已经更新了标题。在提问时请尝试使标题反映问题。在你的情况下,你似乎已经知道XML的加载工作,但它仍然在标题中。注意:不要忘记对答案进行投票,并接受你认为最有用的答案。 – 2012-04-04 17:30:24

+0

好的,谢谢Alexei – Asbie 2012-04-04 17:34:45

回答

0

您需要命名空间管理通入的SelectNodes()方法 。

编辑:纠正代码

XmlNodeList nodes = root.SelectNodes("/val:Root/SenSet/Entry", nsmgr); 
+0

嗯。仍然没有运气... – Asbie 2012-04-04 17:12:59

+0

制造它的XmlNodeList节点= root.SelectNodes工作( “/ VAL:根/ SenSet /输入”,nsmgr); – gbanfill 2012-04-04 17:20:53

+0

谢谢@gbanfill – Asbie 2012-04-04 17:35:26

0

只要改变你的XPath:

XmlNodeList nodes1 = root.SelectNodes("/val:Root/SenSet/Entry",nsmgr);  

或者:

XmlNodeList nodes = root.SelectNodes("SenSet/Entry"); 
0

你的XPath查询字符串应该是:

XmlNodeList nodes = root.SelectNodes("/val:Root/SenSet/Entry", nsmgr); 

或更简洁,

XmlNodeList nodes = root.SelectNodes("//SenSet/Entry", nsmgr); 
+0

谢谢!问题解决了! – Asbie 2012-04-04 17:33:47