我想从节点中选择所有值,但是有些错误,因为消息框不显示任何内容。 XML文件位于同一文件夹中,即项目。
XML:
<?xml version="1.0" encoding="UTF-8" ?>
<names>
<file>
<name>Test name 1</name>
<author>Test author 1</author>
<version>1.0</version>
</file>
<file>
<name>Test name 2</name>
<author>Test author 2</author>
<version>2.0</version>
</file>
<file>
<name>Test name 3</name>
<author>Test author 3</author>
<version>3.0</version>
</file>
</names>
C#代码:
XmlDocument xml = new XmlDocument();
xml.LoadXml(Files.xml);
XmlNodeList xnList = xml.SelectNodes("names/file/name");
foreach (XmlNode xn in xnList)
{
MessageBox.Show(xn.ToString());
}
答案 0 :(得分:2)
LoadXml从指定的字符串加载XML文档。如果要按路径加载xml,请使用Load(filePath)。
XmlDocument xml = new XmlDocument();
xml.Load(@"C:\Sample.xml");
XmlNodeList xnList = xml.SelectNodes("names/file/name");
foreach (XmlNode xn in xnList)
{
Console.WriteLine(xn.InnerText);
}
// outputs,
// Test name 1
// Test name 2
// Test name 3
答案 1 :(得分:0)
您应该验证Files.xml
属性是否为包含示例XML的string
(假设它是属性)。 LoadXml
直接从给定的string
加载XML数据。
我已经按原样使用了您的代码,但它运行正常。最好在//
方法调用中使用SelectNodes
前缀从根开始,但即使没有这个更改,它也应该按预期工作。
XmlDocument xml = new XmlDocument();
xml.LoadXml(File.ReadAllText("test.xml"));
XmlNodeList xnList = xml.SelectNodes("//names/file/name");
foreach (XmlNode xn in xnList)
{
Console.WriteLine(xn.ToString());
}
答案 2 :(得分:0)
如果您使用值“attributes”而不是添加节点并将内部文本更改为它,那么对您来说会更容易,并且设置和获取会更容易。 例如,如果你的XML喜欢这个
<names>
<file name="Test name 1" author="Test author 1" version="1.0" />
<file name="Test name 2" author="Test author 2" version="2.0" />
<file name="Test name 3" author="Test author 3" version="3.0" />
</names>
对于您的代码,您可以使用以下
try
{
XDocument doc = XDocument.Load(@"C:\Sample.xml");
foreach (var files in doc.Descendants("names"))
{
//remember value will be null if the attribute is missing
//to present the values it is going to be
Console.WriteLine("File Name : " + (string)files.Attribute("name") + ", File Author :" + (string)files.Attribute("author") + ", File Version : " + (string)files.Attribute("version"));
//if you want to set a specific attribute
if ((string)files.Attribute("name") == "Example")
{
task.SetAttributeValue("author", "Example Author");
}
}
}
catch (Exception ex)
{
//your exception here
}