我有以下XML,我想在我的C#代码中解析它。但是,我不知道应该怎么做。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<results>
<fields>
<field>COLUMN_NAME_1</field>
<field>COLUMN_NAME_2</field>
<field>COLUMN_NAME_3</field>
<field>COLUMN_NAME_4</field>
</fields>
<rows>
<row>
<col>value_for_column_1</col>
<col>value_for_column_2</col>
<col>value_for_column_3</col>
<col>value_for_column_4</col>
</row>
<row>
<col>value_for_column_1</col>
<col>value_for_column_2</col>
<col>value_for_column_3</col>
<col>value_for_column_4</col>
</row>
...
</rows>
</results>
这只是一个例子,因为我无法提供真实的数据。 XML的结构看起来完全一样。 “COLUMN_NAME_”和“value_for_column_”由字符串表示。如果你能帮助我,我会非常感激。
答案 0 :(得分:1)
首先,创建一个xml document对象。然后获取根节点,然后访问您的自定义节点。
XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNode root = doc.DocumentElement;
XmlNode s = root.SelectSingleNode('/' + rootName + '/' + section);
答案 1 :(得分:0)
看一下XmlDocument
,你可以递归迭代ChildNodes
属性。
e.g。
void Recurse(XmlNodeList list)
{
foreach(XmlNode node in list)
{
// Do some work
Recurse(node.ChildNodes);
}
}
答案 2 :(得分:0)
正如其他人所说,XmlDocument是阅读此类文件的最舒适方式之一。您可以使用foreach
遍历节点,可以针对它运行XPath查询等。
我想补充一点,在XML文件非常大的情况下(因此一次在内存中读取它是不切实际的),有一个XmlReader类,它允许你从开始到结束顺序读取XML文件,只在内存中保留一小部分。
答案 3 :(得分:0)
通过使用以下内容,我们可以获取fields元素和rows元素:
node.FirstNode
- 获取父级的第一个子节点node.NextNode
- 获取下一个兄弟节点加载xml并初始化列列表。
XElement root = XElement.Load(file); // or .Parse(string);
List<List<string>> columns = new List<List<string>>();
获取列标题:
XElement fields = (XElement)root.FirstNode;
fields.Elements().Select((x, i) =>
{
columns.Add(new List<string>());
columns[i].Add((string)x);
return true; // because a select has to return something
}).ToArray();
然后获取行:
XElement rows = (XElement)fields.NextNode;
rows.Elements().ToList().ForEach(row =>
row.Elements().Select((x, i) =>
{
columns[i].Add((string)x);
return true;
}).ToArray());
列列表将包含标题,后跟按列排序的所有行。
PS我的测试需要.ToArray()'s
,您的项目可能不需要它们。
答案 4 :(得分:-1)
这是最简单的方法:
private static void Main()
{
const string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> <results> ... </results>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
var fieldsCollection = doc.GetElementsByTagName("fields");
var rowsCollection = doc.GetElementsByTagName("rows");
}