从c#中的xml字符串中读取文本?

时间:2015-04-05 23:47:08

标签: c# xml

我正在尝试从xml字符串下面读取Message值。怎么看?

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

确实

4 个答案:

答案 0 :(得分:1)

XPathSelectElements区分大小写。将element.Attribute("message")更改为element.Attribute("Message")

答案 1 :(得分: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

看到我的其他答案

答案 2 :(得分:0)

最简单的方法是使用XDocument而不是XPath,只需选择&#34; ValidationIssues&#34;元素如:

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();
    }
}

答案 3 :(得分:0)

请注意,XML区分大小写。需要在XPath中使用完全相同的情况提及XML元素和属性名称。

如果您喜欢XPath,还可以在XPath中添加Message属性检查。例如,此XPath仅返回具有XML属性ValidationMessage的<{1}}:

Message

另一个提示,您可能更喜欢将/Messages/ValidationIssues/ValidationMessage[@Message] XElement投射到XAttribute - 或其他一些可能的类型 - 而不是访问string属性。这种方法具有优势,例如,如果未找到属性/元素,则可以避免空引用异常(在这种情况下永远不会发生,因为我们已经在Value / from子句中验证了属性的存在)除此之外,您可以在合适的数据类型中轻松获取属性/元素值:

where