Dieser ist ein wenig schwierig. Sagen wir, ich habe diese XmlDocumentSo entfernen Sie alle leeren XElements
<Object>
<Property1>1</Property1>
<Property2>2</Property2>
<SubObject>
<DeeplyNestedObject />
</SubObject>
</Object>
ich diese zurück Da jedes der Kinder <SubObject>
<Object>
<Property1>1</Property1>
<Property2>2</Property2>
</Object>
erhalten möchten alle leeren Elemente ich es loswerden wollen. Die Herausforderung besteht darin, dass Sie Knoten nicht entfernen können, während Sie über sie hinweg iterieren. Jede Hilfe würde sehr geschätzt werden.
UPDATE Hier ist, was ich mit aufgewickelt.
public XDocument Process()
{
//Load my XDocument
var xmlDoc = GetObjectXml(_source);
//Keep track of empty elements
var childrenToDelete = new List<XElement>();
//Recursively iterate through each child node
foreach (var node in xmlDoc.Root.Elements())
Process(node, childrenToDelete);
//An items marked for deletion can safely be removed here
//Since we're not iterating over the source elements collection
foreach (var deletion in childrenToDelete)
deletion.Remove();
return xmlDoc;
}
private void Process(XElement node, List<XElement> elementsToDelete)
{
//Walk the child elements
if (node.HasElements)
{
//This is the collection of child elements to be deleted
//for this particular node
var childrenToDelete = new List<XElement>();
//Recursively iterate each child
foreach (var child in node.Elements())
Process(child, childrenToDelete);
//Delete all children that were marked as empty
foreach (var deletion in childrenToDelete)
deletion.Remove();
//Since we just removed all this nodes empty children
//delete it if there's nothing left
if (node.IsEmpty)
elementsToDelete.Add(node);
}
//The current leaf node is empty so mark it for deletion
else if (node.IsEmpty)
elementsToDelete.Add(node);
}
Wenn jemand in dem Anwendungsfall dafür interessiert ist, ist es für ein ObjectFilter Projekt, das ich zusammen.
Verwenden Sie die System.Xml zum Lesen der Konfigurationsdatei –
@sarooptrivedi: Lesen Sie die Frage. – SLaks
@SLaks: Ich mache die gleichen Dinge in meinem Projekt. Sie können das XMLDOcument lesen und dann die Datei aktualisieren und das XML zuletzt speichern –