2012-04-04 7 views
0

名前空間接頭辞を使用するには:XML - 私は<a href="http://localhost/file.xml" rel="nofollow">http://localhost/file.xml</a>で、このXMLを持っているか

<?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の読み込みがうまくいっていることが分かっているようですが、それはまだタイトルのままです。注:回答に投票し、最も有用なものを受け入れることを忘れないでください。 –

+0

ありがとう、ありがとうAlexei – Asbie

答えて

0

名前空間マネージャをSelectNodes() メソッドに渡す必要があります。

編集:修正コード

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

うーん。まだ運がありません... – Asbie

+0

XmlNodeListノード= root.SelectNodes( "/ val:Root/SenSet/Entry"、nsmgr)で動作させました。 – gbanfill

+0

ありがとうございました@gbanfill – Asbie

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

関連する問題