繁体   English   中英

如何以C#格式读取XML中单个节点的两个属性?

[英]How can I read two attributes of a single node in XML in forms C#?

这是我的代码,用于读取单个节点的两个属性。

这是我的Xml文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Users>
  <User Name="aa" Occupation="dd" Date_Of_Birth="123456" NIC="123123" ID="79461" />
  <User Name="Ali Rasheed" Occupation="Student" Date_Of_Birth="111694" NIC="4550246607037" ID="12661" />
  <User Name="Asif Rasheed" Occupation="Civil Engineer" Date_Of_Birth="241190" NIC="4550346603073" ID="90939" />
</Users>

码:

private void button1_Click(object sender, EventArgs e)
{
    XDocument doc = XDocument.Load(@"C:\GenesisSolutionsCRMSBuild12101\XMLDatabase.xml");
    var idExist = (doc.Descendants("User").Any(x => (string)x.Attribute("ID") == txtId.Text));
    if (idExist)
    {
        var nicExist = doc.Descendants("User").Any(x => (string)x.Attribute("NIC") == txtNic.Text);
        if (nicExist)
        {
            new formMainMenu().Show();
            Hide();
        }
        else
        {
            MessageBox.Show("Invalid NIC", "Member Login - Genesis Solutions CRMS");
        }
    }
    else
    {
        MessageBox.Show("Invalid ID", "Member Login - Genesis Solutions CRMS");
    }
}

我想检查单个节点是否具有例如两个属性。 如果输入id 121661和nic 4550246607037,则应该说是,该值存在于节点中。

您不能只在Any检查两者吗?

var bothExist = (doc.Descendants("User").Any(x => (string)x.Attribute("ID") == txtId.Text &&
                                                  (string)x.Attribute("NIC") == txtNic.Text);

您可以使用OR,但随后必须确定一项或两项是否匹配。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = 
                "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
                    "<Users>" +
                      "<User Name=\"aa\" Occupation=\"dd\" Date_Of_Birth=\"123456\" NIC=\"123123\" ID=\"79461\" />" +
                      "<User Name=\"Ali Rasheed\" Occupation=\"Student\" Date_Of_Birth=\"111694\" NIC=\"4550246607037\" ID=\"12661\" />" +
                      "<User Name=\"Asif Rasheed\" Occupation=\"Civil Engineer\" Date_Of_Birth=\"241190\" NIC=\"4550346603073\" ID=\"90939\" />" +
            "</Users>";

            XDocument doc = XDocument.Parse(input);

            long searchID = 121661;
            long searchNic = 455024660703;


            var results = doc.Descendants ("User").Where(x => (long.Parse(x.Attribute("NIC").Value) == searchNic) || long.Parse(x.Attribute("ID").Value) == searchID)
                .Select(y => new {id = long.Parse(y.Attribute("ID").Value), nic = long.Parse(y.Attribute("NIC").Value)}).ToList();




        }
    }
}​

暂无
暂无

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

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