我有一个非常糟糕的外部xml提要,所以我不确定如何直接反序列化。
我不能在我的程序集中使用System.IO.Linq,因此我知道唯一不能使用的解决方案。
此xml的示例是
<body>
<route>
<stop tag="Info I need to get"/>
<stop tag="Info I need to get"/>
<path>
<point tag="info I need to get"/>
<point tag="info I need to get"/>
<point tag="info I need to get"/>
</path>
<path>
<point tag="info I need to get"/>
</path>
<path>
<point tag="info I need to get"/>
<point tag="info I need to get"/>
</path>
</route>
</body>
如果我能以某种方式将所有路径点解析成数组,我可以轻松地获取标记内的数据。
我在How to parse multiple single xml elements in .Net C# 提到了我所提到的linq解决方案答案 0 :(得分:3)
您可以使用 XPath 选择具有tag
属性的所有节点
XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");
foreach (XmlElement node in doc.SelectNodes("//*[@tag]"))
{
Console.WriteLine(node.Name + ": " + node.GetAttribute("tag"));
}
答案 1 :(得分:2)
您可以使用XmlDocument吗?
您可能需要学习一些XPath以便能够很好地导航它,但这应该可以解决问题。
你也可以做这样简单的事情:
XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");
foreach(XmlNode node in doc.SelectNodes("point"))
{
var valueYouWant = node.Attributes["tag"].Value;
// etc.
}
答案 2 :(得分:2)
我建议使用数组列表,因为我猜你不知道确切的节点数
ArrayList list = new ArrayList();
XmlDocument doc = new XmlDocument();
doc.Load("sample.xml");
XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("point"); // You can also use XPath here
foreach (XmlNode node in nodes)
{
list.Add(node);
}
答案 3 :(得分:0)
答案 4 :(得分:0)
另一种方法是使用xml阅读器XML Reader MSDN,您只需查找路径类型的元素,并使用类似于Reading Attributes