繁体   English   中英

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

[英]Read text from xml string in c#?

我正在尝试从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));

没有

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

这是如何做:

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;

您还可以在以下位置看到我的其他答案: 如何使用XMLNode.SelectSingleNode

最简单的方法是使用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();
    }
}

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

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

/Messages/ValidationIssues/ValidationMessage[@Message]

另一个技巧是,您可能希望将XElementXAttributestring -或其他可能的类型-而不是访问Value属性。 这种方法具有优势,例如,在找不到属性/元素的情况下,可以避免空引用异常(这种情况下永远不会发生,因为我们已经在from / where子句中验证了属性的存在),此外,您还可以获取属性/ element值很容易在适当的数据类型中:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM