【发布时间】:2015-07-14 16:37:44
【问题描述】:
我在从 xml 文件中读取信息时遇到了一点问题...
传递给我的文件有数千行。我只对其中的 300 - 400 行感兴趣。当用户完成他的操作并且要读取的数据可以存储在List<string>中时,我不需要将任何数据写回xml。
我在网上找到了使用XmlTextReader 读取数据的解决方案。所以我不必创建一个类并使用序列化器。但似乎我使用了XmlTextReader 错误。或许你能帮帮我……
这就是 xml 的样子:
<?xml version="1.0" encoding="utf-8"?>
<ProjectConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi="http://www.w3.org/2001/XMLSchema-instance">
<ProjectLists xmlns="...">
<ProjectList>
... // not interested in this data
</ProjectList>
<ProjectList>
<ListNode>
<Name>Test_Environment</Name>
<Children>
<ListNode>
<Name>yyy</Name>
<Children>
<ListNode>
<Name>205 (ST)</Name>
<Children>
<ListNode>
<Name>098-0031</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0032</Name>
<Children />
</ListNode>
//more ListNodes...
</Children>
</ListNode>
<ListNode>
<Name>old</Name>
<Children>
<ListNode>
<Name>W098-32</Name>
<Children />
</ListNode>
</Children>
</ListNode>
</Children>
</ListNode>
<ListNode>
<Name>xxx</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0001</Name>
<Children />
</ListNode>
<ListNode>
<Name>098-0011</Name>
<Children />
</ListNode>
// More List Nodes
</Children>
</ListNode>
<ListNode>
// more List Nodes
</ListNode>
</ProjectList>
<ProjectList>
//more uninteresting ProjectLists...
</ProjectList>
我只对最内部名称元素的Value 感兴趣(前两个是“098-0031”和“098-0032”)。
这是我的代码:
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
{
if (reader.Name == "Name") {
reader.Read();
if (reader.Value == "Test_Environment") {
reader.ReadToDescendant("Children");
if (reader.Name == "Children") {
reader.ReadToDescendant("Children");
}
}
}
}
break;
}
}
但是条件reader.Name == "Children" 永远不会满足......有人可以向我解释为什么。也许向我展示一种将这些值存储在List<string> 中的简单方法?提前致谢!
编辑:我编辑了 xml。很抱歉,但从我的 xml 中过滤掉不必要的混乱部分真的很难......
【问题讨论】:
-
可以使用其他类似
Linq2XML吗? -
@SkyFang 绝对有可能