繁体   English   中英

通过XmlDocument按子项选择父节点

[英]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.

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