从XML文件中提取内容

本文关键字:提取 XML 文件 | 更新日期: 2023-09-27 18:01:09

我有一个C#应用程序,它使用按钮生成文件。目前,我想使用C#从XML文件中提取内容,并将其作为字符串传递。例如,在我的XML文件中,我有一个标记名。我想使用c#从XML文件中提取名称。我应该如何实现它?下面是我目前拥有的示例代码。整个过程必须通过单击按钮来执行。

private void button1_Click(object sender, EventArgs e)
{
    XElement xml = XElement.Load("C:''Windows 7.xml"); 
    IEnumerable<XElement> propertyIDs = xml.Descendants("PropertyId");
    foreach (XElement child in xml.Elements())
    {
        XElement row = child.Element("my:VM_Name");
        string test = xml.ToString();
        Console.WriteLine(test);
    }    
}

请访问此链接以查看我的xml文件:http://pastebin.com/NKhBb4Zh

从XML文件中提取内容

我重写了您的示例,并将其更改为使用XmlDocument类。由于存在my命名空间,我不得不添加NameSpaceManager。使用它,您甚至可以选择一个特殊的节点。

        string url = @"e:'temp'data.xml";
        XmlDocument doc = new System.Xml.XmlDocument();
        doc.Load(url);
        XmlElement docElement = doc.DocumentElement;
        /// loop through all childNodes
        foreach (XmlNode childNode in docElement.ChildNodes)
        {
            Console.WriteLine(childNode.Name + ": " + childNode.InnerText);
        }
        XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
        mgr.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-05-27T03:57:48");
        /// use the given XmlNamespaceManager to select a specific element
        XmlNode node = docElement.SelectSingleNode("my:VM_DiskSize", mgr);
        /// use innerText for node text and value for attributes only
        Console.WriteLine("'n" + node.Name + ": " + node.InnerText);

hth

您添加到问题中的评论非常有用。特别是:

我添加了这个代码:

XElement name = xml.Element("my:VM_Name"); 
string test = xml.ToString(); 
Console.WriteLine(test); 

但我仍然无法从XML标签中提取Windows7

和:

我得到这个错误":"字符,十六进制值0x3A,不能包含在名称中。

让我们先从错误开始。不能像以前那样将ns:name对传递给Element方法。使用此API,名称空间(ns(必须通过XName类型以编程方式提供。因此,这行应该改为:

XElement name = xml.Element(XName.Get("VM_Name", "my")); 

在这里,我们将限定名称作为实际的XName传递,而不是作为冒号分隔的字符串传递。注意秩序;使用此语法,命名空间位于第二个

现在,一旦你完成了所有这些,你遇到问题的另一行是:

string test = xml.ToString(); 

这里,xml指的是根XML节点,而您实际想要的大概是刚才查询的元素:xml.Element(XName.Get("VM_Name", "my"))。此外,要获取该节点的文本内容,您应该使用Value属性。我怀疑你真正想要的是:

string test = name.Value;