2015-04-05 77 views
0

我正在嘗試從下面的xml字符串讀取Message值。如何閱讀?從c#中的xml字符串中讀取文本?

 <Messages> 
      <Exceptions /> 
       <ValidationIssues> 
        <ValidationMessage Message="The Customer Communication requires a value for Search Phone or Email." FriendlyMessage="\" /> 
       </ValidationIssues> 
     </Messages>" 

試圖

var values = (from element in doc.XPathSelectElements("/Messages/Validationsissues/validationmessage") 
        where element.Attribute("message") != null 
        select (element.Attribute("message").Value)); 

+0

XPathSelectElements是否區分大小寫? – Ulric 2015-04-05 23:49:32

+0

你是否修改了大小寫?此外,你的意圖是誤導性的,不應該在一個自動結束標籤後額外提供意圖。 – mason 2015-04-05 23:50:10

+0

另外,'ValidationIssues'拼寫與'Validationsissues'不同。中間還有一個's'。 – Ulric 2015-04-05 23:50:57

回答

1

XPathSelectElements是區分大小寫的。將element.Attribute("message")更改爲element.Attribute("Message")

0

方法如下:

XmlDocument doc = new XmlDocument(); 
doc.LoadXML("<Messages> 
      <Exceptions /> 
       <ValidationIssues> 
        <ValidationMessage Message=\"The Customer Communication requires a value for Search Phone or Email.\" FriendlyMessage=\"\" /> 
       </ValidationIssues> 
     </Messages>" ); 


String str = doc.SelectSingleNode("//Messages/ValidationIssues/ValidationMessage").Attributes["Message"].Value; 

您還可以看看我在其他答案:How to use XMLNode.SelectSingleNode

0

最簡單的事情是做這個用XDocument沒有XPath的,但簡單地選擇「ValidationIssues」元素如:

class Program 
{ 
    static string my_xml = 
     "<Messages> " + 
     " <Exceptions />" + 
     " <ValidationIssues>" + 
     "  <ValidationMessage Message=\"The Customer Communication requires a value for Search Phone or Email.\" FriendlyMessage=\"\\\" /> " + 
     " </ValidationIssues>" + 
     "</Messages>"; 

    public static void Main(params string[] args) 
    { 
     var doc = XDocument.Parse(my_xml, LoadOptions.PreserveWhitespace); 
     var messages = doc 
      .Descendants("ValidationMessage") 
      .Where(x => x.Attribute("Message") != null) 
      .Select(x => x.Attribute("Message").Value); 
     Console.WriteLine(string.Join(Environment.NewLine, messages)); 
     Console.ReadLine(); 
    } 
} 
0

請注意,XML區分大小寫。需要在您的XPath中使用完全相同的案例來提及XML元素和屬性名稱。

如果您喜歡XPath,還可以在XPath中添加Message屬性檢查。例如,這個XPath僅返回ValidationMessage具有XML屬性Message

/Messages/ValidationIssues/ValidationMessage[@Message] 

另一種技巧,你可能更喜歡鑄造XElementXAttributestring - 或者一些其他可能的類型 - 而不是訪問Value財產。例如,如果找不到屬性/元素(因爲我們已經驗證from/where子句中的屬性存在,所以在這種情況下從不發生),所以您可以避免出現空引用異常,除了可能獲取屬性/元素值很容易在合適的數據類型中:

var xpath = "/Messages/ValidationIssues/ValidationMessage[@Message]"; 
var values = (from element in doc.XPathSelectElements(xpath) 
       select (string)element.Attribute("message"));