如何在C#中读取XML文档对象?

3
在一个Visual C#项目中,我想把一个XML文档对象传递给一个方法。在该方法中,我应该读取我存储在XML文档对象中的值,而无需创建XML文件。
谢谢大家的回复,我最终得到了我的代码片段。
    //use following code when assign values to XMlDocument
         XMLOBJECT()
             {
                XmlDocument xmlEmployee = new XmlDocument();
                XmlElement xmlRoot =  xmlEmployee.CreateElement("HR");
                XmlElement xmlEmployees = xmlEmployee.CreateElement("Employee");
                xmlEmployees.SetAttribute("Name", "XYZ");
                xmlEmployees.SetAttribute("DOB", "12/12/2010");
                xmlRoot.AppendChild(xmlEmployees);
                xmlEmployee.AppendChild(xmlRoot);
                Employee Emp=new EMployee();
                Emp.retriveXMl(xmlEmployee);
              }

在上面的代码中,我们创建了XML对象,现在我们可以传递Xml对象。
//Use Following code when assign values to Employee Object
 class employee
   {
    retrivelXMl(XMLDOCUMENT xmlEmployeeobject)
    {
    string NAME;
    int DOB;
            XmlNodeList xmlEmployees = xmlEmployeeobject.SelectNodes("//Employee");
             foreach (XmlElement Employee in xmlEmployees)
             {
             NAME = Employee.GetAttribute("Name"));
             DOB   = int.parse(Employee.GetAttribute("DOB"));      
             }
    }
   }

你能否准确地解释一下,你在做你所描述的事情时遇到了什么问题? - Oded
LOL...显然我不是唯一一个对大写字母感到恼火的人。 - cHao
请发布一些代码或解决方案的尝试,以便我们可以看到您已经尝试并且放弃了什么。谢谢。 - Bob G
3个回答

3
您可以使用 XmlNodeReader 来访问您的 XmlDocument 中的元素。
根据您想要对 XmlDocument 的内容进行的操作,XmlNodeReader 可能不足以满足您的需求。根据您提供的少量信息,我添加了一些通用代码,展示如何使用 XmlNodeReader 访问 XmlDocument
如果您在问题中添加更多详细信息,说明您确切想要实现什么,我们可能能够为您提供更适合您需求的答案。
public void WriteXmlDocument(XmlDocument document)
{
    if (document == null)
    {
        throw new ArgumentNullException("document");
    }

    using (XmlNodeReader nodeReader = new XmlNodeReader(document))
    {
        while (nodeReader.Read())
        {
            Console.WriteLine(nodeReader.Value);
        }
    };
}

-- 编辑 --

稍微详细介绍一下XmlNodeReader的可能性。您还可以选择特定的节点并处理它们。

使用以下代码,您还可以访问特定节点的值。

XmlNode specificNode = document.SelectSingleNode("/NodeName/ChildNodeName");

if (specificNode != null)
{
    XmlNodeReader specificNodeReader = new XmlNodeReader(specificNode);

    while (specificNodeReader.Read())
    {
        Console.WriteLine(specificNodeReader.Value);
    }
}

这些例子将节点值写到控制台中,但是你可以改为将值写入变量中。非常灵活。


1

我喜欢使用XmlTextReader和XmlTextWriter。它们非常容易使用。

请查看this链接

编辑

要使用XmlDocument,请使用以下方法:

XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xmlDocument.OuterXml));

如果你想使用验证,请使用

XmlValidatingReader xmlValidatingReader = new XmlValidatingReader(xmlTextReader);

是的,我首先研究了它们的使用。虽然我找不到一种初始化XmlTextWriter而不需要引用实际Xml文件、TextWriter或其他内容的方法,但我认为OP没有可用的实际Xml文件,只有内存中的XmlDocument对象。我也无法从XmlDocument对象生成XmlTextReader。我检查了您发布的链接,在样例中,据我所见,作者总是使用物理XML文件。我认为OP的问题在于他只能访问XmlDocument对象,而不想使用实际的XML文件。 - Nope
实例化XmlTextReader的好方法。在这一点上,我完全没有考虑过验证。找到问题了(+1);是的,你说得对,XmlNodeReader似乎不支持模式验证或文档类型定义(DTD)。 - Nope

0

你尝试过查看 LINQ to XML 吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接