0

我有一个结构很差的外部 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>

如果我能以某种方式将所有路径点解析成一个数组,我就可以轻松地获取标签内的数据。

我所指的 linq 解决方案在How to parse multiple single xml elements in .Net C#中提到

4

5 回答 5

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"));
}
于 2012-11-16T17:16:14.480 回答
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.
} 
于 2012-11-16T17:09:09.383 回答
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);
}
于 2012-11-16T17:09:08.903 回答
0

您可以使用 XmlSerializer :

这是一个很好的例子:Simple XmlSerializer example

这将允许您序列化对象以进行存储。

于 2012-11-16T17:11:51.700 回答
0

另一种方法是使用 xml 阅读器XML Reader MSDN,您只需查找类型为path的元素并使用类似于Reading Attributes的内容加载属性数据

于 2012-11-16T17:21:52.923 回答