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