浏览 XML 子项

Y.o*_*.op 1 c# xml xmldocument

我在 C# 上读取 XML 文件时遇到了一些问题。这是我的 XML 文件:

<?xml version = "1.0" encoding="ISO8859-1" standalone="yes" ?>
<SITES>
    <SITE>
        <ERROR_COUNTER>0</ERROR_COUNTER>
        <PROD>0</PROD>
        <LOGINFO>
            <URL>http://site1.com/login</URL>
            <LOGIN>login</LOGIN>
            <PASSWORD>pass</PASSWORD>
            <DELAYMAX>20</DELAYMAX>
        </LOGINFO>
        <EMAIL>
            <TO>dsds@dee.com, dsdsddd@dee.com,dsdds@dee.com</TO>
            <SUBJECT></SUBJECT>
            <BODY></BODY>
            <PATH></PATH>
        </EMAIL>
        <TESTS>
            <TEST>
                <URL>http://site1.com/settings</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
            <TEST>
                <URL>http://site1.com/faq</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
            <TEST>
                <URL>http://site1.com/download-faq-pdf</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
        </TESTS>
    </SITE>
    <SITE>
        <ERROR_COUNTER>0</ERROR_COUNTER>
        <PROD>0</PROD>
        <LOGINFO>
            <URL>http://site2.com/login</URL>
            <LOGIN>login2</LOGIN>
            <PASSWORD>pass2</PASSWORD>
            <DELAYMAX>20</DELAYMAX>
        </LOGINFO>
        <EMAIL>
            <TO>dsds@dee.com, dsdsddd@dee.com,dsdds@dee.com</TO>
            <SUBJECT></SUBJECT>
            <BODY></BODY>
            <PATH></PATH>
        </EMAIL>
        <TESTS>
            <TEST>
                <URL>http://site2.com/settings</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
            <TEST>
                <URL>http://site2.com/faq</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
            <TEST>
                <URL>http://site2.com/download-faq-pdf</URL>
                <DELAYMAX>5</DELAYMAX>
            </TEST>
        </TESTS>
    </SITE>
</SITES>    
Run Code Online (Sandbox Code Playgroud)

所以我希望能够在 C# 中浏览我的网站列表(我可以有几十个),为此,我这样做了:

    XmlDocument xml = new XmlDocument();
    xml.Load(@"D:\REM\config.xml");
    foreach (XmlElement ndSites in xml.SelectNodes("SITES/SITE"))
    {
        Console.WriteLine(ndSites.GetElementsByTagName("ERROR_COUNTER"));
    }
Run Code Online (Sandbox Code Playgroud)

但是一旦我这样做了,我不知道如何访问我孩子的值,更不用说如何在我的 TESTS 上进行第二次循环,然后访问每个孩子 TEST 并检索我的 URL。

我的目标是为每个网站检索 LOGINFO 中的连接信息,然后检索 TESTS、TEST 中的 URL 以及所有存在的 SITES。

我尝试了很多东西,但我没有找到任何符合我需要的东西。

如果有人可以帮助我。

编辑:这是我用于反序列化代码 C# 的类

class XMLParser
{
    public XMLParser() { }
    public List<Site> readXML(XmlDocument xml)
    {
        List<Test> tests = new List<Test>();
        Test test;

        List<Site> sites = new List<Site>();
        Site site;

        //List<url>;
        foreach (XmlElement ndSites in xml.SelectNodes("SITES/SITE"))
        {
            int idSite = int.Parse(ndSites.Attributes[0].Value);
            site = new Site();
            int prod = int.Parse(ndSites["PROD"].InnerText);
            int error = 0;
            int max = 3;

            foreach (XmlElement ndError in ndSites.SelectNodes("/ERROR"))
            {
                error = int.Parse(ndError["COUNTER"].InnerText);
                max = int.Parse(ndError["MAX"].InnerText);
            }
            foreach (XmlElement ndLogin in ndSites.SelectNodes("LOGINFO"))
            {
                site = new Site(idSite, ndLogin["URL"].InnerText, ndLogin["LOGIN"].InnerText, ndLogin["PASSWORD"].InnerText, error, prod, max);
            }

            foreach (XmlElement ndTests in ndSites.SelectNodes("TESTS/TEST"))
            {
                test = new Test(ndTests["URL"].InnerText, int.Parse(ndTests["DELAYMAX"].InnerText));
                tests.Add(test);
            }
            site.lstTest = tests;
            sites.Add(site);
        }
        return sites;
    }
Run Code Online (Sandbox Code Playgroud)

但是我有另一个问题,当我使用我的 Site 对象时,o 有六个元素,我的站点 1 的所有 URL 和我的站点 2 的所有 URL。

以我上面的 XML 文件为例,因此我将有两个包含六个元素的 Test 对象

小智 5

干脆你可以用参考值,你的代码如果是真的,但我完成得很好。

当您想使用xml代码时,您还必须知道该结构。现在锁定:

XmlDocument xml = new XmlDocument();
xml.Load(@"D:\REM\config.xml");
foreach (XmlElement ndSites in xml.SelectNodes("your node"))
{
    Console.WriteLine(ndSites.GetElementsByTagName("your node"));
}
Run Code Online (Sandbox Code Playgroud)

这个方法,GetElementsByTagName()得到xml你想要的所有部分,你可以像这样工作:

XmlDocument xml = new XmlDocument();
xml.Load(@"D:\REM\config.xml");
foreach (XmlElement ndSites in xml.SelectNodes("your node"))
{
    var xmlNode = ndSites.GetElementsByTagName("your node");
    if(xmlNode != null && xmlNode.contain("your node that you want"))
    {
        foreach(var item in xmlNode.GetElementByTagName(your node that you want))
        {
             console.write(item.value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如需更多信息,请访问此网站