2011-10-28 25 views
1

我有这样的XML:如何从XML获取此vaue?

<meteo_italia> 
    <localita> 
     <id>2861</id> 
     <nome>Foppolo</nome> 
     <prov>BG</prov> 
     <capoluogo>0</capoluogo> 
     <regione>LOMBARDIA</regione> 
     <previsione time="2011-10-28T06:00"> 
      <id_tempo>6</id_tempo> 
      <desc_tempo>temporali isolati</desc_tempo> 
      <temp>2</temp> 
      <press>1024.3</press> 
      <um_rel>78</um_rel> 
      <zerot>3000 m</zerot> 
      <qn>ND</qn> 
      <v_dir>ESE</v_dir> 
      <v_int>4 nodi</v_int> 
      <ore_s>3</ore_s> 
      <prec>0-10mm</prec> 
     </previsione> 
     <previsione time="2011-10-28T12:00"> 
      <id_tempo>6</id_tempo> 
      <desc_tempo>temporali isolati</desc_tempo> 
      <temp>11</temp> 
      <press>1024.9</press> 
      <um_rel>46</um_rel> 
      <zerot>3550 m</zerot> 
      <qn>ND</qn> 
      <v_dir>SSO</v_dir> 
      <v_int>3 nodi</v_int> 
      <ore_s>3</ore_s> 
      <prec>0-10mm</prec> 
     </previsione> 

     ... XML continues... 

,我想从C#中的第二个节点previsione提取价值temp

试图用:

using (var wc = new WebClient()) 
{ 
    m_strFilePath = wc.DownloadString(xmlMeteo); 
} 

XmlDocument myXmlDocument = new XmlDocument(); 
myXmlDocument.LoadXml(m_strFilePath); 

try 
{ 
    Response.Write("Value : " + myXmlDocument.SelectSingleNode("//previsione[position()=0]//temp").Value); 
} 
catch { } 

,但我不能得到它。

+0

也有效,// previsione [位置()= 2] /温度 – BLUEPIXY

回答

3

试着改变你的查询:

"//previsione[2]/temp" 

和访问.InnerText而非.Valuesince .Value rarely has an actual value,从不为元素)。

[2]应该(根据要求)取项; /temp表示“子元素temp”。

+0

试过。没有什么.. :( – markzzz

+0

@markzzz见编辑; p –

+0

是的,它似乎工作!我用哪种语言来查询此值?这不是XPath ... – markzzz

1

它看起来像你的XPath字符串是错误的 - 双斜杠(“/”),当你有它得到它是得到一个后裔(http://www.tizag.com/xmlTutorial/xpathdescendant.php)。

尝试只使用一个斜杠,因为这只会让孩子。

//previsione[2]/temp 

而且 - XSLT元素不是从零开始的,所以元素在pos开始= 1

这里是一个网站,我觉得很适合让XPATH字符串它还格式化XML太伟大! !

http://xmltoolbox.appspot.com/index.html

+0

它不工作的... – markzzz

+0

见编辑 - 抱歉,我错过了阅读部分说你想要的第二个元素! 感谢@Marc Gravell指出了这一点! –

1

的XPath的节点现在的位置是立足于1,不是0。请尝试:

myXmlDocument.SelectSingleNode("//previsione[2]/temp/text()").Value;