Question

mon problème est le suivant: Comment puis-je supprimer ChildNodes sélectionné de XmlNode récursive? Mon fichier XML ressemble à ...

..<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>...

Je voudrais supprimer tous les noeuds (Type de valeur) où le parentNode est le type de paramètre avec id = « Description », mais pas de valeur notes que les enfants de valeurs ou d'un paramètre avec id = « valeur » Dans XSLT je dirais par exemple: problème //value[parent::parameter[@id='description'] and @lang='en']The est: Je le code de langue: par exemple, « De » et maintenant je voudrais supprimer tous les nœuds de valeur de frères et soeurs si une valeur avec lang = « de » existe et supprimer tous les nœuds frères excluant la valeur sans lang attribut si lang = « de » existe pas (fallback) I espoir, vous pouvez me aider à écrire un code C # pour remplacer récursive tous les nœuds de valeur indésirables.

Était-ce utile?

La solution

Espérons que c'est ce que you'r recherche.

Si vous chargez you'r xml dans un XmlDocument vous pouvez utiliser une méthode comme celui-ci pour éliminer les nœuds correspondant à un XPath.

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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top