2015-05-19 3 views
0

Я работаю над XML-файлом, который имеет открывающие теги, за которыми следуют некоторые дочерние теги с внутренним текстом. Когда открывающий тег появляется снова, он делает это без закрывающего тега для предыдущего. Так, например, файл выглядит следующим образом:Цикл через xml для добавления отсутствующего тега

<?xml version="1.0" encoding="utf-8"?> 
<invoice> 
    <id>999</id> 
    <newRa elem="0"> 
     <createD>20150519</createD> 
     <modD>12345</modD> 
    </newRa> 
    <total>123.99</total> 
<invoice> 

Я хочу создать Vb подпрограмму, которая использует XPath, чтобы добавить «/ счет» метки на каждом вхождении «счетов-фактуры».

Должно выглядеть так:

<?xml version="1.0" encoding="utf-8"?> 
<invoice> 
    <id>999</id> 
    <newRa elem="0"> 
     <createD>20150519</createD> 
     <modD>12345</modD> 
    </newRa> 
    <total>123.99</total> 
</invoice> 
<invoice> 
... 
... 

ответ

1

Если файл достаточно мал, чтобы открыть в полном объеме, вы можете использовать:

Dim st As String = My.Computer.FileSystem.ReadAllText("C:\temp\test.xml") 
st = st.Replace("</total>", "</total>" & vbCrLf & "</invoice>") 
My.Computer.FileSystem.WriteAllText("c:\temp\test.xml", st, False) 

Если файл большой, создать StreamReader, что читает каждую строку и использует строку, аналогичную линии st = st.Replace..., чтобы добавить дополнительный тег в нужное место и добавить каждую строку в новый файл.

+0

Я работаю с файлом размером 200 МБ, поэтому он бросает исключение system.outofmemory. Любое обходное решение для этого? – Gmac

+0

У меня нет файла размером 200 МБ xml для тестирования, поэтому я не могу быть уверен, но вы, вероятно, можете использовать streamreader для чтения каждой строки и добавления ее в новый файл. Когда содержимое линии равно «», вам нужно добавить «» & vbCrLf & «https://msdn.microsoft.com/en-us/library/db5x7c0d%28v=vs.110%29 .aspx –

+0

Да, я на самом деле начал использовать streamreader, но использовал ваш кусок, где он заменяет закрывающий тег тем же тегом, добавляет строку и добавляет тег закрытия счета. Позволяет вам знать, спасибо! – Gmac

Смежные вопросы