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)
如需更多信息,请访问此网站
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |