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