如何将每个XML行读入指定的字符串?

时间:2009-06-02 06:15:13

标签: xml vb.net

我正在尝试创建一个VB.net应用程序,它从XML文件(或ini文件,无关紧要)读取每一行,它指示字符串的名称应该是什么。

E.g

"string1 = xml.line1"
"string2 = xml.line2"

这样做的最佳方法是什么? 我已经使用Xml.XmlTextReader进行了一些操作,它似乎完成了这项工作,但是我无法分解每一行,因为它是自己的字符串?

2 个答案:

答案 0 :(得分:1)

在XML文档中,一行很少是有用的概念。例如:

<foo>
    <bar first="x"
         second="y" />
</foo>

相当于

<foo>
    <bar first="x" second="y" />
</foo>

通常,您要查询单个元素而不是行的XML文档。但是,在.ini文件中,一条线会更加明智。

这里的大局是什么?你想要实现什么目标?

如果你需要阅读文本文件的所有行(但你不需要一次全部在内存中)我建议使用File.OpenText返回TextReader,然后调用ReadLine()并一直处理字符串,直到返回的行为Nothing(这意味着您已到达文件的末尾)。不要忘记用Using语句包装读者。

编辑:如果你不需要文件中的任何其他内容,那么我每行只写一个条目,你基本上就完成了。另一方面,这意味着如果您需要任何其他配置信息,则需要更改所有内容。

使用ini文件会相当简单,但您必须编写代码来解析它。 (诚​​然,可能会有第三方图书馆为你做这件事。我在以前的公司写过一篇,但这并不需要很长时间。)

使用XML文件会在值周围引入更多“漏洞”,但读取起来会非常简单,特别是如果您使用的是.NET 3.5和LINQ to XML。例如,您可以拥有这样的文件:

<Configuration>
    <RegistryEntries>
         <RegistryEntry>First</RegistryEntry>
         <RegistryEntry>Second</RegistryEntry>
         <RegistryEntry>Third</RegistryEntry>
    </RegistryEntries>
</Configuration>

并通过执行以下操作获取条目序列:

document.Root.Element("RegistryEntries")
             .Elements("RegistryEntry")
             .Select(e => e.Value);

作为另一种选择,您可以使用.NET的内置配置/设置功能。您是否尝试过使用项目属性的“设置”部分?

答案 1 :(得分:0)

如果您逐行处理XML并希望忽略XML语义,则应将其视为纯文本文件并在每行上运行正则表达式:

Dim lines = File.GetAllLines("file.xml")
' Check the lines (which is a String array) for the criteria