2014-01-03 2 views
1

Я попытался заменить внутренний текст тега месяца. I.e месячные имена должны быть заменены на их указанный месяц. я попробовал это,Замена файла с помощью regex

Dim strFile As String = File.ReadAllText(TextBox1.Text & "\" & parentFolder & ".xml") 
    strFile = Regex.Replace(strFile, "<conf-start iso-8601-date=""([0-9-]+)""><day>([0-9]+)</day><month>March</month>", "<conf-start iso-8601-date=""([0-9-]+)""><day>([0-9]+)</day><month>03</month>") 
    File.WriteAllText(TextBox1.Text & "\" & parentFolder & ".xml", strFile) 

теперь проблема в том, что если линия, как это,

<conf-start iso-8601-date="2011-03-06"><day>06</day><month>March</month><year>2011</year></conf-start> 

здесь выше выражение догоняет данных и заменяет его,

<conf-start iso-8601-date=""([0-9-]+)""><day>([0-9-]+)</day><month>03</month><year>2011</year></conf-start> 

вместо этого следует заменить

<conf-start iso-8601-date="2011-03-06"><day>06</day><month>03</month> 

любая помощь будет действительно aprreciated

ответ

1

Попробуйте

Dim y = "<conf-start iso-8601-date=""2011-05-31""><day>31</day><month>Jan</month><year>2011</year></conf-start>" 

Dim Match = Regex.Match(y, "<month>([^>]*)<\/month>").Groups(1).ToString 
Regex.Replace(y, Match, DateTime.ParseExact(Match, "MMM", CultureInfo.CurrentCulture).Month.ToString) 

Это даст вам OP Как и

<conf-start iso-8601-date="2011-05-31"><day>31</day><month>01</month><year>2011</year></conf-start> 
1

Вы можете сделать это следующим образом:

Dim doc As New XmlDocument() 
Dim months As IDictionary(Of String, String) = New Dictionary(Of String, String)() From {{"January", "1"}, {"February", "2"}, {"March", "3"}, {"April", "4"}, {"May", "5"}, {"June", "6"}, {"July", "7"}, {"8", "August"}, {"September", "9"}, {"October", "10"}, {"November", "11"}, {"December", "12"}} 
Dim expr As New Regex([String].Join("|", months.Keys)) 
Dim strFile As String = "May" 

doc.Load(TextBox1.Text & "\" & parentFolder & ".xml") 

For Each item As XmlNode In doc.GetElementsByTagName("month") 
    item.Value = expr.Replace(item.Value, Function(m) months(m.Value)) 
Next 
+0

здесь проблема что файл является недопустимым xml-файлом, и я должен делать изменения в этом конкретном файле, он показывает мне e rror не смог найти файл ......../confjats.dtd –

+0

- это невозможно внести определенные изменения в мой код и устранить проблему –

+0

@jigar Это может помочь: http://social.msdn.microsoft.com/форум/EN-US/b8b062c8-d0d0-498b-a9a5-76dc7d72cf9a/как игнорируемые-ОТД-когда-загрузки в XML-документ? форум = xmlandnetfx –

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