У меня есть следующий узел в моем XML файле:Невозможно удалить пустой узел XML с помощью выражения XPath @ «// * [не (узел())]»
<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) –
Вы ищут тег, который содержит пробелы, а whitespace может состоять из множества символов, например « » для вкладок или « » для новой строки и т. д. Итак, даже простой символ пробела равен значению. Таким образом, он не найдет узел с символом пробела, используя not (node ()). –
Даже если вы используете string-length (text()), это не сработает, потому что строка будет иметь длину 1 с пробелом. –