2010-10-27 50 views
3

在一个Visual C#项目中,我想将XML文档对象传递给一个方法。在该方法中,我应该读取存储在XML Document对象中的值。无需创建XML文件。如何读取C#中的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"));  
      } 
    } 
    } 
+0

哇,帽锁多少? – 2010-10-27 11:19:57

+0

您能否准确解释您在描述您所描述的内容时遇到的问题? – Oded 2010-10-27 11:20:00

+0

LOL ...显然我并不是唯一受帽子烦恼的人。 – cHao 2010-10-27 11:21:35

回答

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); 
    } 
} 

实例写那些节点值输出到控制台,但是,可以改变此将该值写入到例如变量。灵活性在那里。

+0

感谢回复家伙,我终于得到了我的一段代码。 – 2010-10-28 04:54:12

1

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

this链接

编辑

从XmlDocument的使用使用

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

如果你想使用验证使用

XmlValidatingReader xmlValidatingReader = new XmlValidatingReader(xmlTextReader); 
+0

是的,我首先研究了那些用法。虽然我找不到一个在没有引用实际的Xml文件,TextWriter或其他文件的情况下初始化'XmlTextWriter'的方法,我认为OP没有实际的Xml文件可用,而只是内存中的一个'XmlDocument'对象。我无法从'XmlDocument'对象生成'XmlTextReader'。我检查了你发布的链接,并且在作者总是使用物理XML文件的示例中,据我所知。我认为OPs的问题是他只能访问'XmlDocument'对象,并且不想使用实际的XML文件。 – Nope 2010-10-27 12:16:55

+0

虽然XmlNodeReader是一个很好的方法。 – 2010-10-27 12:29:17

+0

实例化'XmlTextReader'的好方法。在这一点上,我还没有想过验证。很好的接球(+1);是的,你是正确的,'XmlNodeReader'似乎不支持模式验证或文档类型定义(DTD)。 – Nope 2010-10-27 12:36:04

0

您是否尝试过在看LINQ to XML?