как разобрать эту строку типа XML - PullRequest
0 голосов
/ 11 апреля 2011

Может ли кто-нибудь подсказать мне, как разобрать эту строку типа 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 и т. Д.

Спасибо заранее

Ответы [ 5 ]

1 голос
/ 11 апреля 2011

Использование 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 голосов
/ 16 октября 2012

Если вы хотите разобрать строку данных xml в 'Dataset', вы можете использовать этот пример

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

    DataSet data = new DataSet();

    data.ReadXml(new StringReader(xmlString));
0 голосов
/ 11 апреля 2011

Если вы хотите перейти на Linq в 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 голосов
/ 11 апреля 2011

Я предпочитаю использовать 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
0 голосов
/ 11 апреля 2011

Это должно работать, но вы должны удалить дубликат Moter элемента из вашего XML - только тогда вы можете использовать словарь:

XDocument doc = XDocument.Load("test.xml");
var dictionary = doc.Descendants("data")
                    .Elements()
                    .ToDictionary(x => x.Name.ToString(), x => x.Value);
string ac1Value = dictionary["AC1"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...