0
我在XML文件中的以下节点:无法删除空的XML节点@“// * [不是(节点())]”
<PERSON>
<LEOKA_DATA> </LEOKA_DATA>
</PERSON>
我不能删除LEOKA标签使用以下代码(片断):
string file = CommonVariables.MainDir + @"\Schemas\RemoveEmptyTags.xsl";
try
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(tempFile); //tempfile is the xml file
XmlNodeList emptyElements = xmlDocument.SelectNodes(@"//*[not(node())]");
if (emptyElements != null)
for (int i = emptyElements.Count - 1; i >= 0; i--)
{
var parentNode = emptyElements[i].ParentNode;
if (parentNode != null)
{
if (emptyElements[i].Name != "LINE")
parentNode.RemoveChild(emptyElements[i]);
}
}
}
catch (FileNotFoundException ex)
{ **something here** }
然而,上面的代码工作,如果该节点是象下面这样(注意开始标记和结束标记之间没有空格):
<LEOKA></LEOKA>
我也尝试使用下面的代码,但没有工作:
var doc = XDocument.Parse(tempfile);
var emptyElements = from descendant in doc.Descendants()
where string.IsNullOrWhiteSpace(descendant.Value)
select descendant;
emptyElements.Remove();
任何帮助将非常感激。如果您需要更多详细信息,请告诉我。谢谢。
可能的重复[按照包含使用XPath的空白值查找节点](http://stackoverflow.com/questions/393840/locating-the-node-by-value-containing-whitespaces-using-xpath) – 2015-02-05 14:56:24
正在寻找一个包含空格的标签,并且空白可以由多个字符组成,如' '用于制表符,或' '用于换行符等等。因此,即使是一个简单的空格字符,也等于一个值。因此,它不会使用not(node())查找具有空格字符的节点。 – 2015-02-05 14:59:53
即使使用字符串长度(text()),它也不起作用,因为字符串的长度为1,并带有空格char。 – 2015-02-05 15:01:18