C# 如何在C中读取XML文档对象?
在visual C项目中,我希望将XML文档对象传递给方法。在该方法中,我应该读取存储在XML文档对象中的值。无需创建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
//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);
}