2010-09-28 143 views
2

之間數據我有一個字符串:C#,xml解析。獲得標籤

responsestring = "<?xml version="1.0" encoding="utf-8"?> 
<upload><image><name></name><hash>SOmetext</hash>" 

我怎樣才能

<hash> and </hash> 

之間的價值?

我嘗試:

responseString.Substring(responseString.LastIndexOf("<hash>") + 6, 8); // this sort of works , but won't work in every situation. 

也試圖搞亂與周圍的XMLReader,但無法找到解決方案。

TY

回答

7

其他人建議使用LINQ to XML解決方案,如果可能的話,我也會使用它。

如果您遇到.NET 2.0,請使用XmlDocument或甚至XmlReader

但是不要嘗試使用SubstringIndexOf自己操縱原始字符串。使用一個一些描述的XML API。否則你得到它錯了。這是使用正確的工具來完成這項工作的問題。正確解析XML是一大塊工作 - 已經完成的工作。

現在,只是爲了讓這一個完整的答案,這裏是使用您的樣本數據的簡短但完整的程序:

using System; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     string response = @"<?xml version='1.0' encoding='utf-8'?> 
<upload><image><name></name><hash>Some text</hash></image></upload>"; 

     XDocument doc = XDocument.Parse(response); 

     foreach (XElement hashElement in doc.Descendants("hash")) 
     { 
      string hashValue = (string) hashElement; 
      Console.WriteLine(hashValue); 
     } 
    } 
} 

顯然,這將循環在所有hash元素。如果您只需要一個,則可以根據您的要求使用doc.Descendants("hash").Single()doc.Descendants("hash").First()

請注意,我在此處使用的轉換和Value屬性將返回元素內的所有文本節點的級聯。希望對你來說沒關係 - 或者如果需要的話,你可以得到第一個文本節點,這是一個直接的孩子。

+0

作品完美!感謝您的完整解決方案 – user257412 2010-09-28 07:35:07

1

變種VAL = XElement.Parse();

val.Descendants(...)。值

8

嘗試

XDocument doc = XDocument.Parse(str); 
var a = from hash in doc.Descendants("hash") 
     select hash.Value; 

你需要System.Core程序和System.Xml.Linq的程序集引用

0

您可以使用一個XmlReader和/或xpath查詢來獲取所有需要的數據。

+0

請您詳細說明一下。我完全不熟悉xml – user257412 2010-09-28 06:58:01

+0

請參閱下面Vinay的答案。 – Kangkan 2010-09-28 07:35:23

+0

@你有一個美麗的小鬍子 – 2010-10-19 18:03:34

1

讓你的xml很好地形成並用反斜槓來避免雙引號。然後應用以下代碼

XDocument resp = XDocument.Parse("<hash>SOmetext</hash>"); 

     var r= from element in resp.Elements() 
      where element.Name == "hash" 
      select element; 


    foreach (var item in r) 
    { 
     Console.WriteLine(item.Value); 
    }