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

a 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 に答える