(Рекурсивно?) Regex для удаления пустых тегов XML
Я хотел бы удалить все пустые теги из XML-файла. Однако мои параметры очень ограничены, поэтому я бы хотел использовать регулярное выражение (которое доступно и известно здесь).
У меня нет проблем с регулярным выражением для удаления пустых тегов в их вариациях, но вложенные пустые теги немного сложнее, так как мое регулярное выражение пойдет только на одну глубину.
Я полагаю, что это из-за названной группы захвата в моей рекурсии, но я не могу это исправить.
Это то, что я до сих пор: здесь
С уважением и благодарностью,
Laurent
1 ответ
Попробуй это
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<root>" +
"<tag1>Good</tag1>" +
"<tag2 element=\"Good\"></tag2>" +
"<tag3 element=\"Good\" />" +
"<tag4></tag4>" +
"<tag13>" +
"</tag13>" +
"<tag5 />" +
"<tag6/>" +
"<tag7>" +
"<tag7.1>good</tag7.1>" +
"</tag7>" +
"<tag8>" +
"<tag8.1></tag8.1>" +
"</tag8>" +
"<tag9>" +
"<tag9.1 />" +
"</tag9>" +
"<tag10>" +
"<tag10.1/>" +
"</tag10>" +
"<tag10>" +
"<tag10.1>Wel iets</tag10.1>" +
"</tag10>" +
"<tag11>" +
"<tag11.1 element=\"Good\"/>" +
"</tag11>" +
"<tag12>" +
"<tag12.1></tag12.1>" +
"<tag12.2>" +
"<tag12.2.1></tag12.2.1>" +
"</tag12.2>" +
"</tag12>" +
"</root>";
XElement root = XElement.Parse(xml);
var deleteElements = root.Descendants().Where(x => (x.Descendants().Count() == 0) && (x.Attributes().Count() == 0) && (x.Value.Length == 0)).ToList();
foreach (XElement deleteElement in deleteElements)
{
deleteElement.Remove();
}
}
}
}