从XML文件中提取内容

时间:2011-07-06 03:05:55

标签: c# xml visual-studio-2010

我有一个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

2 个答案:

答案 0 :(得分:2)

我重写了您的示例并将其更改为使用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

答案 1 :(得分:1)

您在问题中添加的评论非常有帮助。特别是:

  

我添加了这段代码:

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

但我仍无法从XML标记中提取出Windows 7

  

我收到此错误':'字符,十六进制值0x3A,不能包含在名称中。

让我们先从错误开始。您已完成Element方式ns:name方法无法传递。ns方法。使用此API,必须通过XName类型以编程方式提供命名空间(XElement name = xml.Element(XName.Get("VM_Name", "my")); )。所以相反,该行应为:

XName

这里我们将限定名称作为实际string test = xml.ToString(); 传递,而不是作为起源的冒号分隔字符串。注意订单;命名空间使用这种语法来 second

现在,完成所有这些后,您遇到问题的另一行是:

xml

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

{{1}}