Frage

mein Problem ist folgendes: Wie kann ich Childnodes von XmlNode rekursiv ausgewählt entfernen? Meine XML-Datei sieht aus wie ...

..<element type="TextBox" id="xslFilePath">
                <parameters>
                    <parameter id="description">
                        <value><![CDATA[Pfad zur XSL]]></value>
                        <value lang="en"><![CDATA[XSL-file's path]]></value>
                    </parameter>
                    <parameter id="tooltip">
                        <value><![CDATA[Pfad zur XSL]]></value>
                        <value lang="en"><![CDATA[XSL-file's path]]></value>
                    </parameter>
                </parameters>
                <values>
                    <value><![CDATA[/include/extensions/languageReferences/xsl/default.xsl]]></value>
                </values>
            </element>
            <element type="DropDownList" id="imageOrientation">
                <parameters>
                    <parameter id="description">
                        <value><![CDATA[Anordnung]]></value>
                        <value lang="en"><![CDATA[Orientation]]></value>
                    </parameter>
                    <parameter id="tooltip">
                        <value><![CDATA[Anordnung]]></value>
                        <value lang="en"><![CDATA[Orientation]]></value>
                    </parameter>
                </parameters>
                <items>
                    <item id="" selected="true">
                        <parameters>
                            <parameter id="value">
                                <value><![CDATA[vertical]]></value>
                            </parameter>
                            <parameter id="description">
                                <value><![CDATA[senkrecht]]></value>
                                <value lang="en"><![CDATA[vertical]]></value>
                            </parameter>
                        </parameters>
                    </item>
                    <item id="" selected="false">
                        <parameters>
                            <parameter id="value">
                                <value><![CDATA[horizontal]]></value>
                            </parameter>
                            <parameter id="description">
                                <value><![CDATA[waagerecht]]></value>
                                <value lang="en"><![CDATA[horizontal]]></value>
                            </parameter>
                        </parameters>
                    </item>
                </items>
                <values>
                    <value><![CDATA[horizontal]]></value>
                </values>
            </element>...

Ich möchte alle Knoten entfernen (Werttyp), wo die parentNode Parametertyp mit id = „description“, aber nicht wert Noten als Kinder von Werten oder Parametern mit id = „Wert“ In XSLT Ich würde sagen, zB: //value[parent::parameter[@id='description'] and @lang='en']The Problem ist: ich habe den Sprachcode haben: zB „De“ und jetzt würde Ich mag alle Geschwister Wert Knoten entfernen, wenn ein Wert mit lang = „de“ existiert und entfernen Sie alle Geschwisterknoten den Wert ohne lang-Attribut ohne wenn lang = „de“ existiert nicht (als Rückfall) I Hoffnung, Sie können mir helfen, einen c # -Code zu ersetzen rekursiv alle unerwünschten Wert-Knoten zu schreiben.

War es hilfreich?

Lösung

Hoffentlich ist das, was you'r suchen.

Wenn Sie you'r xml in eine XmlDocument laden Sie eine Methode wie diese verwenden können Knoten entfernen, um eine XPath entsprechen.

public void RemoveElements(XmlDocument document, string xpathForElementsToRemove)
{
    if (document == null || document.DocumentElement == null) return;
    var xmlNodeList = document.DocumentElement.SelectNodes(xpathForElementsToRemove);
    if (xmlNodeList == null || xmlNodeList.Count == 0) return;
    for (var n = xmlNodeList.Count - 1; n >= 0; n--)
    {
        var xmlNode = xmlNodeList[n];
        if (xmlNode.ParentNode == null) continue;
        xmlNode.ParentNode.RemoveChild(xmlNode);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top