我試圖用文件內的attribut「nil = true」來清理Xml元素。 我想出了這個算法,但我不喜歡它的外觀。用attribut「nil = true」清理Xml元素 - 創建linq版本?
有人知道這個算法的linq版嗎?
/// <summary>
/// Cleans the Xml element with the attribut "nil=true".
/// </summary>
/// <param name="value">The value.</param>
public static void CleanNil(this XElement value)
{
List<XElement> toDelete = new List<XElement>();
foreach (var element in value.DescendantsAndSelf())
{
if (element != null)
{
bool blnDeleteIt = false;
foreach (var attribut in element.Attributes())
{
if (attribut.Name.LocalName == "nil" && attribut.Value == "true")
{
blnDeleteIt = true;
}
}
if (blnDeleteIt)
{
toDelete.Add(element);
}
}
}
while (toDelete.Count > 0)
{
toDelete[0].Remove();
toDelete.RemoveAt(0);
}
}
你的問題沒有提及任何有關XML命名空間的內容,但http://www.w3.org/2001/XMLSchema-instance命名空間(通常使用前綴「xsi」)具有一個「nil」屬性,您可以將其設置爲「true」 。如果這是您使用的屬性,它解釋了爲什麼答案不能按預期工作。答案在默認名稱空間中查找'nil'屬性,並且不適用於您的XML。 – 2012-02-10 15:53:21