Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中读取XML文档对象?_C#_Xml - Fatal编程技术网

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

C# 如何在C中读取XML文档对象?,c#,xml,C#,Xml,在visual C项目中,我希望将XML文档对象传递给方法。在该方法中,我应该读取存储在XML文档对象中的值。无需创建XML文件 //use following code when assign values to XMlDocument XMLOBJECT() { XmlDocument xmlEmployee = new XmlDocument(); XmlElement xm

在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);
              }
谢谢你们的回复,伙计们,我终于得到了我的代码

    //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 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);
              }
//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"));      
             }
    }
   }
可以使用XmlNodeReader访问XmlDocument中的元素

    //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);
              }
根据您对XmlDocument内容的处理方式,XmlNodeReader可能不够。 通过您提供的少量信息,我添加了一些通用代码,说明如何从使用XmlNodeReader开始访问XmlDocument

    //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);
              }
如果您在问题中添加更多细节,说明您正试图实现的目标,我们可能会为您提供更适合您需求的答案

    //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);
              }
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);
        }
    };
}
-编辑-

    //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);
              }
详细介绍XmlNodeReader的可能性。还可以选择特定节点并对其进行处理

    //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);
              }
使用,您还可以访问下面的特定节点值

    //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);
              }
XmlNode specificNode = document.SelectSingleNode("/NodeName/ChildNodeName");

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

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

示例将这些节点值写入控制台,但是,您可以将其更改为将值写入变量。灵活性是存在的。

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

    //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);
              }
参见链接

    //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);
              }
编辑

    //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);
              }
从XmlDocument使用

    //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);
              }
XmlTextReader xmlTextReader = new XmlTextReader(new StringReader(xmlDocument.OuterXml));
如果要使用验证,请使用

    //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);
              }
XmlValidatingReader xmlValidatingReader = new XmlValidatingReader(xmlTextReader);

你试过看LINQ to XML吗?

你能准确地解释一下你在做你所描述的事情时遇到了什么问题吗?哈哈……显然我不是唯一一个被caps惹恼的人。发布一些代码,或者尝试一个解决方案,这样我们就可以看到你已经尝试和放弃了什么。谢谢。是的,我先研究过这些的用途。虽然我找不到一种方法来初始化XmlTextWriter而不引用实际的Xml文件、TextWriter或其他文件,但我认为OP没有实际的Xml文件可用,而内存中只有一个XmlDocument对象。我也无法从XmlDocument对象生成XmlTextReader。我查看了您发布的链接,在示例中,就我所见,作者总是使用物理XML文件。我认为OPs的问题是,他只能访问XmlDocument对象,不想使用实际的XML文件。实例化XmlTextReader的好方法。在这一点上,我根本没有考虑过验证。漂亮的接球+1;是的,您是正确的,XmlNodeReader似乎不支持模式验证或文档类型定义DTD。
    //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);
              }