1

我有类似的字符串

xmlDataEntAddAttr = @"<ADDITIONAL INFO>
                            <Host> Test Host Name </Host>
                            <IP Address>Test IP Address</IP Address>
                            <Domain>Test Domain</Domain>
                            <Host Method>Test Host Method</Host Method>
                            <Flag>Test Flag</Flag>
                      </ADDITIONAL INFO>";

我如何将其读入带有标签名称和值的字符串列表或任何集合中。请不要像内部标签一样<Host></Host>可以是任何值,只有不变的是这里的根本意思<ADDITIONAL INFO></ADDITIONAL INFO>

请建议任何解析方法。

4

3 回答 3

3

使用XDocument(在System.Xml.Linq命名空间中)和 Linq to Xml。

XDocument xDocument = XDocument.Parse(xmlDataEntAddAttr);
Dictionary<string, string> result = xDocument.Root.Elements().ToDictionary(element => element.Name.LocalName, element => element.Value);

但是,您的字符串不是有效的 XML。XML 元素名称中不能有空格。您的字符串的有效版本是:

xmlDataEntAddAttr = @"<ADDITIONAL_INFO>
                            <Host> Test Host Name </Host>
                            <IP_Address>Test IP Address</IP_Address>
                            <Domain>Test Domain</Domain>
                            <Host_Method>Test Host Method</Host_Method>
                            <Flag>Test Flag</Flag>
                      </ADDITIONAL_INFO>";
于 2013-02-01T13:13:26.740 回答
1

如果我的 xml 结构如下:

<nodes>
    <node id="123">
        <text>text goes here</text>
    </node>
</nodes>

然后我可以这样做:

XDocument xDoc;
using(StringReader sr = new StringReader("thexml"))
{
    xDoc = XDocument.Load(sr);
}
myDictionary = xDoc.Descendants("node").ToDictionary(x => x.Attribute("id").Value, x =>         x.Descendants("text").First().Value);
于 2013-02-01T13:18:19.747 回答
1

请注意,您需要删除附加信息、IP 地址和主机方法中的空格

        var xmlDataEntAddAttr = @"<?xml version=""1.0""?>
                        <ADDITIONALINFO>
                        <Host> Test Host Name </Host>
                        <IPAddress>Test IP Address</IPAddress>
                        <Domain>Test Domain</Domain>
                        <HostMethod>Test Host Method</HostMethod>
                        <Flag>Test Flag</Flag>
                  </ADDITIONALINFO>";
        var xDocument = XDocument.Parse(xmlDataEntAddAttr);
        if (xDocument.Root != null)
        {
            var coll = xDocument.Root.Elements().Select(x => new {Name = x.Name, Value = x.Value});
            foreach (var item in coll)
            {
              Console.WriteLine("Name: {0}\tValue: {1}", item.Name, item.Value);
            }
        }
        Console.ReadLine();
于 2013-02-01T13:35:00.957 回答