[英]Select parent node by children via XmlDocument
请帮助,我有xml文件,
<Users>
<User FullName="" Name="sa">
<userAvatarCache>-1</userAvatarCache>
<description></description>
<email></email>
<phone></phone>
<UserActive>true</UserActive>
</User>
<User FullName="asfgd" Name="stest">
<userAvatarCache>-1</userAvatarCache>
<description>aasad</description>
<email>test@ukr.net</email>
<phone>sdafdsfds0850</phone>
<UserActive>true</UserActive>
</User>
</Users>
我需要通过电子邮件来选择全名 。 我使用了所有结构
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(res.GetResponseStream());
XmlNode xmlNode = xmlDoc.DocumentElement.SelectSingleNode("User");
现在,我只需要1个结果(全名)的电子邮件即可。 我该如何纠正? 谢谢
请google XPath ,并尝试使用它。 请注意,将XmlDocument用于大文件是一个非常糟糕的主意。
码:
var rawXml = @"<Users>
<User FullName="""" Name=""sa"">
<userAvatarCache>-1</userAvatarCache>
<description></description>
<email></email>
<phone></phone>
<UserActive>true</UserActive>
</User>
<User FullName=""asfgd"" Name=""stest"">
<userAvatarCache>-1</userAvatarCache>
<description>aasad</description>
<email>test@ukr.net</email>
<phone>sdafdsfds0850</phone>
<UserActive>true</UserActive>
</User>
</Users>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(rawXml);
string email = "test@ukr.net";
string selector = string.Format("User[email=\"{0}\"]", email);
XmlNode xmlNode = xmlDoc.DocumentElement.SelectSingleNode(selector);
if(xmlNode != null)
{
string fullName = xmlNode.Attributes["FullName"].Value;
Console.WriteLine(fullName);
}
基于child的child值选择元素的XPath很好地解决了这一问题。
string xmlString = @"
<Users>
<User FullName='' Name='sa'>
<userAvatarCache>-1</userAvatarCache>
<description></description>
<email></email>
<phone></phone>
<UserActive>true</UserActive>
</User>
<User FullName='asfgd' Name='stest'>
<userAvatarCache>-1</userAvatarCache>
<description>aasad</description>
<email>test@ukr.net</email>
<phone>sdafdsfds0850</phone>
<UserActive>true</UserActive>
</User>
</Users>";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
XmlNode xmlNode = xmlDoc.DocumentElement.SelectSingleNode("./User[email = 'test@ukr.net']");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.