0

我知道,有很多关于解析 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”

我怎样才能以不同的方式解析?

4

5 回答 5

3

使用LINQ to XML

XElement reg = XElement.Load(path);
string login = (string)reg.Element("email_login");

顺便说一句,您的代码对我来说很好。确保您没有选择所有元素,而email_login不仅仅是选择。即,如果您获取子节点XmlNodeList nodeList = xmlDoc.ChildNodes;而不是通过标签名称获取元素,那么您将获得结果。

或者您可能有几个名为email_login. 例如,以下 xml 将使用您的代码生成结果:

<reg>
  <email_login>paykforcycvert@reincarnate.com</email_login>
  <email_login>nDOUn3TybD</email_login>
</reg>
于 2013-08-13T14:01:50.947 回答
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;
    }
}

但对我来说,它工作正常。

于 2013-08-13T14:13:56.353 回答
0

您还可以使用XPath查询:

XmlNodesList nodesList = xmlDoc.SelectNodes("//email_login"));
foreach(string oneNode in nodesList) 
{
    Console.Write(oneNode.InnerText);
}
于 2013-08-13T14:16:56.547 回答
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");
于 2013-08-13T14:05:55.793 回答
0

我运行了与您提供并作为输出完全相同的代码,paykforcycvert@reincarnate.com所以我的猜测是您在修复某些东西或没有清理之后还没有构建您的项目。

尝试清理项目并再次运行

于 2013-08-13T14:07:11.557 回答