[英]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]
另一个技巧是,您可能希望将XElement
或XAttribute
为string
-或其他可能的类型-而不是访问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.