我的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();
任何帮助都会非常感激。如果您需要更多详细信息,请与我们联系。感谢。
答案 0 :(得分:0)
我会修改你的XPath表达式,如下所示:
XmlNodeList emptyElements = xmlDocument.SelectNodes(@"//*[not(node()[
not(self::text()[normalize-space() = ''])
])]");
换句话说,排除具有除空文本节点之外的子节点的元素,其中“empty”表示没有除空格之外的文本值。