Замените тег XML на регулярное выражение - PullRequest
1 голос
/ 16 апреля 2010

Как заменить определенную часть в XML-файле определенной строкой?

<tag1></tag2>
<tag2></tag2>
...etc
<soundcard num=0> 
<name>test123</name>
</soundcard>
<soundcard num=1> 
<name>test123</name>
</soundcard>
<soundcard num=2> 
<name>test123</name>
</soundcard>
<tag5></tag5>

заменить все части звуковой карты, чтобы результат выглядел следующим образом:

<tag1></tag2>
<tag2></tag2>
...etc
{0}
<tag5></tag5>

Я использую c # .net 3.5 и думаю о регулярном выражении

Ответы [ 3 ]

3 голосов
/ 17 апреля 2010

Если имеет в качестве регулярного выражения, ваш XML-файл правильно сформирован, и вы знаете (скажем, из DTD), что теги <soundcard> не могут быть вложенный, то вы можете использовать

(<soundcard.*?</soundcard>\s*)+

и замените все на {0}.

В C #:

resultString = Regex.Replace(subjectString, @"(<soundcard.*?</soundcard>\s*)+", "{0}", RegexOptions.Singleline);

Для быстрого и однозначного решения одноразовой проблемы, я думаю, это нормально. Не стоит думать о регулярном выражении как о надлежащем инструменте для обработки XML в целом.

2 голосов
/ 16 апреля 2010

Лично я бы использовал Linq to XML, удалил сущности и заменил бы его текстовым узлом.

Обновление от 16 апреля 2010 г., 16:40 MST

Вот пример Linq to XML, я немного заржавел, но он должен хотя бы дать вам представление о том, как это делается.

XElement root = XElement.Load("myxml.xml");

var soundcards = select el from root.Elements() where el.Name == "soundcard" select el;
var prev_node = soundcards.First().PreviousNode;

// Remove Nodes
foreach(XElement card in soundcards)
    card.Remove();

// Build your content here into a variable called newChild

prev_node.AddAfterSelf(newChild);
1 голос
/ 16 апреля 2010

Я бы предложил использовать XSLT-преобразование для замены тегов, которые вы хотите заменить, на известный тег, скажем, а затем String.Replace ('', '{0}') ;.

Я повторяю то, что сказал Йоханнес, НЕ пытайтесь строить RE, чтобы сделать это. По мере того как ваш XML становится более сложным, частота ошибок возрастает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...