我正在尝试从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));
确实
答案 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;
看到我的其他答案
答案 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