2016-08-03 2 views
1

В моей XML некоторые из элемента XML являются пустыми, например:Преобразование XML-теги

<A></A> 

Так что я хочу, чтобы изменить элементы, типа, показанного выше, чтобы преобразовать в <A/> типа элемента, так как может мы делаем это в C# и обновляем в файле.

+1

при разборе файла XML в C# тег может быть идентифицирован как метод IsEmptyElement но тег не могут быть идентифицированы с помощью метода IsEmptyElement с помощью класса XmlReader и в XML некоторые элементы, которые являются пустыми будет представлена ​​как и некоторые, как . Таким образом, чтобы поддерживать единую структуру, мы хотим конвертировать пустые теги, такие как в. Так что если какой-либо новый пользователь читает, он увидит уникальную структуру –

+1

Возможный дубликат [Как свернуть пустые теги xml?] (Http: // stackoverflow.com/questions/198419/how-do-i-collapse-empty-xml-tags) – Default

ответ

1

Вот что я придумал:

private static void FormatEmptyNodes(XmlNode rootNode) 
{ 
    foreach (XmlNode childNode in rootNode.ChildNodes) 
    { 
     FormatEmptyNodes(childNode); 

     if(childNode is XmlElement) 
     { 
      XmlElement element = (XmlElement) childNode; 
      if (string.IsNullOrEmpty(element.InnerText)) element.IsEmpty = true; 
     } 
    } 
} 

затем использовать его как это:

var doc = new XmlDocument(); 
doc.Load(inputFilePath); 
FormatEmptyNodes(doc); 
doc.Save(outputFilePath); 
0

В то время как вы shouldn't use Regex to parse HTML (or XHTML, XML...), в вашем сценарии вы могли использовать его для очистки входящих строк с использованием рисунка <([A-Za-z0-9_.]+)></\\1> и заменой <$1/>:

System.Text.RegularExpressions.Regex.Replace(
    "foo <a></a> bar <a>not empty</a> <tag></tag>", 
    "<([A-Za-z0-9_.]+)></\\1>", 
    "<$1/>") 

Это вернет:

foo <a/> bar <a>not empty</a> <tag/> 

Регулярное выражение может быть понято как показано ниже (изображение, сформированное Regexper):

Regex explained