2013-02-01 53 views
1

我有串呈三角如何讀取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>"; 

我怎麼能看這種與它或任何收集標記名稱和值的字符串列表。 請不要像<Host></Host>這樣的內部標籤可以是任何值只有不變的東西這裏的根意味着<ADDITIONAL INFO></ADDITIONAL INFO>

請提出任何解析方法。

+0

你的意思是一個字符串列表?你想讓你的列表中的每個5標籤的值爲5個元素?或者你也想要標籤本身呢?具體來說,我想知道你是否希望'測試主機名'或'Test Host Name'在你的列表中 – psubsee2003

+0

@ psubsee2003我希望標籤名稱爲''和標籤值'Test Host Name'在列表或任何集合中 – Pratik

回答

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>"; 
+0

非常感謝,這正是我所需要的,但是有可能通過任何調整來讀取帶空格的XML元素,因爲XML字符串中的數據很難更改。 – Pratik

+0

@Pratik如果元素名稱中存在空格,則不稱爲XML,因爲它不符合XML規範。因此,除非您想創建自己的損壞的XML解析器,否則我建議您修復XML源。 –

+0

欣賞評論塞德里克創建一個糟糕的解析器將是不好的選擇。將在XML元素本身中實現更改。非常感謝您的幫助 – Pratik

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); 
+0

Appriciate your help Will,but my solution is更接近塞德里克的答案。謝謝 – Pratik

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(); 
+0

感謝TYY的幫助:) – Pratik

相關問題