2015-04-05 39 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"));