2016-07-29 33 views
0

這裏是XML如何使用的XmlReader

<?xml version="1.0" encoding="UTF-8"?> 
<Data_Speed> 
<Tech ID = "UMTS"> 
    <Coverage ID="Dense_Urban"> 
     <DownLoad_Speed>10</DownLoad_Speed> 
     <Upload_Speed>20</Upload_Speed> 
    </Coverage> 
    <Coverage ID="Urban"> 
     <DownLoad_Speed>30</DownLoad_Speed> 
     <Upload_Speed>40</Upload_Speed> 
    </Coverage> 
    <Coverage ID="SubUrban"> 
     <DownLoad_Speed>50</DownLoad_Speed> 
     <Upload_Speed>60</Upload_Speed> 
    </Coverage> 
</Tech> 
<Tech ID = "UMTS900"> 
    <Coverage ID="Dense_Urban"> 
     <DownLoad_Speed>11</DownLoad_Speed> 
     <Upload_Speed>12</Upload_Speed> 
    </Coverage> 
    <Coverage ID="Urban"> 
     <DownLoad_Speed>13</DownLoad_Speed> 
     <Upload_Speed>14</Upload_Speed> 
    </Coverage> 
    <Coverage ID="SubUrban"> 
     <DownLoad_Speed>15</DownLoad_Speed> 
     <Upload_Speed>16</Upload_Speed> 
    </Coverage> 
</Tech> 
<Tech ID = "4G800"> 
    <Coverage ID="Dense_Urban"> 
     <DownLoad_Speed>30</DownLoad_Speed> 
     <Upload_Speed>42</Upload_Speed> 
    </Coverage> 
    <Coverage ID="Urban"> 
     <DownLoad_Speed>50</DownLoad_Speed> 
     <Upload_Speed>34</Upload_Speed> 
    </Coverage> 
    <Coverage ID="SubUrban"> 
     <DownLoad_Speed>45</DownLoad_Speed> 
     <Upload_Speed>46</Upload_Speed> 
    </Coverage> 
    <Coverage ID="Rural"> 
     <DownLoad_Speed>47</DownLoad_Speed> 
     <Upload_Speed>48</Upload_Speed> 
    </Coverage> 
    <Coverage ID="Variable"> 
     <DownLoad_Speed>15</DownLoad_Speed> 
     <Upload_Speed>52</Upload_Speed>  
    </Coverage> 
    <Coverage ID="Outdoor"> 
     <DownLoad_Speed>25</DownLoad_Speed> 
     <Upload_Speed>22</Upload_Speed> 
    </Coverage> 
</Tech> 
</Data_Speed> 

所以,我怎麼可以通過給定的覆蓋ID城市>和科技ID UMTS900獲得DownLoad_Speed> & UpLoad_Speed>元素的值從XML特定的子元素中獲取價值>?說,如果我給科技id值=「UMTS900」和覆蓋ID值「城市」,我想有字符串值dwnload_speed = 13和Upload_Speed = 14作爲結果。

+0

[點擊](http://stackoverflow.com/q/6442024/1997232),[點擊](http://stackoverflow.com/q/ 14207811/1997232),[單擊](http://stackoverflow.com/q/36913069/1997232)... – Sinatr

回答

0

您需要打開XML文檔

XmlDocument _document = new XmlDocument(); 
byte[] bytes = File.ReadAllBytes(filePath); 
string xml = Encoding.UTF8.GetString(bytes); 
try 
{ 
_document.LoadXml(xml); 
} 
catch (XmlException e) 
{ 
//exception handling 
}     

var doc = (XmlDocument)_document.CloneNode(true); 

XmlNode node = doc.GetElementsByTagName("your child node name"); 

一旦你的節點,那麼你可以做必要的事情與它

1

使用LinqXml

XDocument doc = XDocument.Load(filepath); 

    //ex... 
    string technology = "UMTS900"; 
    string coverage = "Dense_Urban"; 

    var result = doc.Descendants("Tech") 
     .Where(x=> (string)x.Attribute("ID") == technology) 
     .Elements("Coverage") 
     .Where(x=>(string)x.Attribute("ID")== coverage) 
     .Select(x=> new 
        { 
         Dowload_Speed = (string)x.Element("DownLoad_Speed"), 
         Upload_Speed = (string)x.Element("Upload_Speed") 
        }); 

入住這Demo

+0

提示:可以使用顯式轉換來避免空檢查,例如'x =>(string)x.Attribute(「ID」)==技術' –

+0

感謝Hari Prasad的快速回應:) –

+0

我們可以用Javascript @Hari Prasad實現同樣的事情嗎? –

0
string techId = "UMTS900"; 
string coverageId = "SUBURBAN"; 
int downloadSpeed = 0; 
int uploadSpeed = 0; 

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(@"C:\....\DataSpeed.xml"); 
XmlNodeList techTags = xmlDoc.GetElementsByTagName("Tech"); 

foreach (XmlNode techTag in techTags) 
{ 
    if (techTag.Attributes["ID"].Value.Equals(techId,StringComparison.OrdinalIgnoreCase)) 
    { 
     XmlNodeList coverageTags = techTag.ChildNodes; 
     foreach (XmlNode coverageTag in coverageTags) 
     { 
     if (coverageTag.Attributes["ID"].Value.Equals(coverageId, StringComparison.OrdinalIgnoreCase)) 
     { 
      downloadSpeed =Convert.ToInt16(coverageTag.ChildNodes[0].InnerText); 
      uploadSpeed = Convert.ToInt16(coverageTag.ChildNodes[1].InnerText); 
      break; 
      } 
     } 
     break; 
    } 
} 

    if (downloadSpeed == 0 && uploadSpeed == 0) 
    { 
     Console.WriteLine("Specified Tech Id and Coverage Id not found"); 
    } 
    else 
    { 
     Console.WriteLine("Download Speed is {0}. Upload Speed is {1}.",downloadSpeed,uploadSpeed); 
    } 
0

在這裏使用的XmlReader與XML LINQ溶液

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 


namespace ConsoleApplication4 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 

      XmlReader reader = XmlReader.Create(FILENAME); 
      string id = "UMTS900"; 
      object coverages = null; 
      while (!reader.EOF) 
      { 
       if (reader.Name != "Tech") 
       { 
        reader.ReadToFollowing("Tech"); 
       } 
       if (!reader.EOF) 
       { 
        XElement tech = (XElement)XElement.ReadFrom(reader); 
        if((string)tech.Attribute("ID") == id) 
        { 
         coverages = tech.Descendants("Coverage").Select(x => new 
         { 
          id = (string)x.Attribute("ID"), 
          downLoad_Speed = (int)x.Element("DownLoad_Speed"), 
          upLoad_Speed = (int)x.Element("Upload_Speed"), 
         }).ToList(); 
         break; 
        } 
       } 
      } 



     } 
    } 

}