我知道,解析C#有很多问题,但我找不到答案。 所以,我需要编写一个用于解析XML的DLL,但是有一些功能,因为我不知道XML文件中有哪些元素。我需要解析文件的所有节点及其元素。我该怎么做?现在,我正在使用简单文件
<reg>
<email_login>paykforcycvert@reincarnate.com</email_login>
<email_password>nDOUn3TybD</email_password>
</reg>
我的dll代码现在是
public XmlNodeList GetElementsName(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("email_login");
return nodeList;
}
应返回“paykforcycvert@reincarnate.com”。 我的控制台应用程序:
XMLWorker worker = new XMLWorker();
string path = "file:///D:/temp/test.xml";
XmlNodeList nodeList = worker.GetElementsName(path);
for (int i = 0; i < nodeList.Count; i++)
Console.WriteLine(nodeList[i].InnerText);
Console.ReadLine();
但它返回“paykforcycvert@reincarnate.comnDOUn3TybD”
我如何以不同方式解析?
答案 0 :(得分:3)
使用LINQ to XML:
XElement reg = XElement.Load(path);
string login = (string)reg.Element("email_login");
BTW 您的代码对我来说很好。确保您没有选择所有元素而不是email_login
。即如果您要获取子节点XmlNodeList nodeList = xmlDoc.ChildNodes;
而不是按标记名称获取元素,那么您将获得结果。
或者您可能有几个名为email_login
的元素。例如。以下xml将使用您的代码生成结果:
<reg>
<email_login>paykforcycvert@reincarnate.com</email_login>
<email_login>nDOUn3TybD</email_login>
</reg>
答案 1 :(得分:0)
你可以这样做
public List<String> getElementValues(string path,string elementName)
{
XElement doc= XElement.Load(path);
var elementList=doc.Descendants().Elements();
return elementList.Where(x=>x.Name.LocalName==elementName)
.Select(y=>y.Value)
.ToList();
}
现在,您可以获取名称为email_login
var values=getElementValues(path,"email_login");
答案 2 :(得分:0)
我运行了与您提供的完全相同的代码,并将paykforcycvert@reincarnate.com
作为输出,因此我的猜测是您在修复某些内容后未构建项目或未进行清理。
尝试清理项目并再次运行
答案 3 :(得分:0)
在处理您在XMLFile.xml中提供的XML数据后,我运行了以下代码来模拟输出:
class Program
{
static void Main(string[] args)
{
XMLWorker worker = new XMLWorker();
//
string path = @"C:\Users\abc\Desktop\ConsoleApplication1\ConsoleApplication1\XMLFile.xml";
XmlNodeList nodeList = worker.GetElementsName(path);
for (int i = 0; i < nodeList.Count; i++)
Console.WriteLine(nodeList[i].InnerText);
Console.ReadLine();
}
}
public class XMLWorker
{
public XmlNodeList GetElementsName(string path)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("email_login");
return nodeList;
}
}
但对我而言,它运作良好。
答案 4 :(得分:0)
您还可以使用XPath查询:
XmlNodesList nodesList = xmlDoc.SelectNodes("//email_login"));
foreach(string oneNode in nodesList)
{
Console.Write(oneNode.InnerText);
}