2011-04-11 44 views
0

有人能指导我如何解析这个Xml类型的字符串吗?如何解析这个Xml类型的字符串

<data> 
    <LastUpdate></LastUpdate> 
    <AC1>12</AC1> 
    <AC2>13</AC2> 
    <AC3>14</AC3> 
    <Moter></Moter> 
    <Fan1></Fan1> 
    <Fan2></Fan2> 
    <TubeLight1></TubeLight1> 
    <TubeLight2></TubeLight2> 
    <Moter></Moter> 
    <CloseAll></CloseAll> 
</data> 

我需要得到所有结果字符串或列表或字典一样 AC1 = 12,AC2 = 13等

Thnaks提前

+2

就像一个'XDocument.Parse(的xmlString)'? – jcolebrand 2011-04-11 17:10:53

+0

任何事情=)我不介意。我只是想解析那个 – user702597 2011-04-11 17:13:13

回答

0

这应该工作,但是你必须删除从你的XML重复Moter元素 - 只有这样,你可以使用字典:

XDocument doc = XDocument.Load("test.xml"); 
var dictionary = doc.Descendants("data") 
        .Elements() 
        .ToDictionary(x => x.Name.ToString(), x => x.Value); 
string ac1Value = dictionary["AC1"]; 
+0

ming geting非法字符的路径。 'XDocument doc = XDocument.Load(xml);' – user702597 2011-04-11 17:18:11

+0

如果你想解析* XML字符串*(而不是文件),你必须使用'XDocument.Parse(xmlString)' – BrokenGlass 2011-04-11 17:19:25

+0

非常感谢,这有助于 – user702597 2011-04-11 17:24:32

0

如果你想要去的LINQ to XML,然后它看起来是这样的:

 XElement root = XElement.Parse(s); 
     Dictionary<XName, string> dict = root 
      .Elements() 
      .Select(x => new {key = x.Name, value = x.Value}) 
      .ToDictionary(x => x.key, x => x.value); 

只要确保你处理重复你想要的方式。

+0

感谢grzeg。这有助于 – user702597 2011-04-11 17:23:31

0

我更喜欢使用XLinq。下面是示例(在VB.NET):

Private Sub ParseIt() 

     Dim xml = XElement.Parse(sampleXml) 

     Dim dic As New Dictionary(Of String, String) 

     For Each item In xml.Elements 
      dic.Add(item.Name.LocalName, item.Value) 
     Next 

    End Sub 

您也可以使用它像这样(我喜欢这种方法):

Private Sub ParseIt() 

    Dim xml = XElement.Parse("") 

    Dim dic = (From item In xml.Elements).ToDictionary(Function(obj) obj.Name.LocalName, Function(obj) obj.Value) 

End Sub 
1

使用XDocument.Parse方法:

string data = @"<data> 
        <LastUpdate></LastUpdate> 
        <AC1>12</AC1> 
        <AC2>13</AC2> 
        <AC3>14</AC3> 
        <Moter></Moter> 
        <Fan1></Fan1> 
        <Fan2></Fan2> 
        <TubeLight1></TubeLight1> 
        <TubeLight2></TubeLight2> 
        <Moter></Moter> 
        <CloseAll></CloseAll> 
      </data>"; 

XDocument xmlDoc = XDocument.Parse(data); 

var parsedData = from obj in xmlDoc.Descendants("data") 
       select new 
       { 
        LastUpdate = obj.Element("LastUpdate").Value, 
        AC1 = obj.Element("AC1").Value, 
        AC2 = obj.Element("AC1").Value, 
        ... and so on 
       } 

祝你好运!

0

如果你想解析XML数据串到'Dataset'那么你可以使用此示例

string xmlString = @"/*.. .. .*/"; 

    DataSet data = new DataSet(); 

    data.ReadXml(new StringReader(xmlString));