Как прочитать каждую строку XML в указанные строки? - PullRequest
0 голосов
/ 02 июня 2009

Я пытаюсь создать приложение VB.net, которое читает каждую строку из XML-файла (или ini-файла, не имеет значения), который определяет, каким должно быть имя строки.

Например,

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

и т.д.

Как лучше всего это сделать? Я уже немного облажался с Xml.XmlTextReader, и, похоже, он справляется с работой, но мне не удается разбить каждую строку как отдельную строку?

Ответы [ 2 ]

1 голос
/ 02 июня 2009

Строка редко используется в 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. Вы пытались использовать часть «Настройки» в свойствах проекта?

0 голосов
/ 02 июня 2009

Если вы имеете дело с XML построчно и хотите игнорировать семантику XML, вы должны рассматривать его как простой текстовый файл и запускать регулярное выражение или что-то в каждой строке:

Dim lines = File.GetAllLines("file.xml")
' Check the lines (which is a String array) for the criteria
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...