使用xlinq删除所有空元素

Dav*_*ave 1 xml linq-to-xml

我正在使用xlinq进行一些变换,其中一些变换可能导致在文档中留下空元素.

完成所有这些转换后,如何查询xdocument中的所有空元素?

换一种说法; 如果我删除了<a>碰巧是<li>标签内唯一元素的所有标签,我该如何删除空标签<li>

之前:

XDocument.Parse(@"<body>
   <ul><li><a href="#">Joy</a></li></ul>
   <p>Hi.</p>
</body>").Descendants("a").Remove();
Run Code Online (Sandbox Code Playgroud)

后:

<body>
   <ul><li/></ul>
   <p>Hi.</p>
</body>
Run Code Online (Sandbox Code Playgroud)

我会比较喜欢:

<body>
   <p>Hi.</p>
</body>
Run Code Online (Sandbox Code Playgroud)

Min*_*ras 10

检查元素是否没有属性 s并且没有元素是不够的.您需要检查元素是否真的为空(绝对没有内容).XElement有一个属性,实际上可以帮助你做到这一点 - XElement.IsEmpty.

var document = XDocument.Parse(@"<body><ul><li><a href='#'>Joy</a></li></ul><p>Hi.</p></body>");
document.Descendants("a").Remove();

var emptyElements = from element in document.Descendants()
                    where element.IsEmpty
                    select element;

while (emptyElements.Any())
    emptyElements.Remove();
Run Code Online (Sandbox Code Playgroud)