Pregunta

mi problema es el siguiente: ¿Cómo puedo eliminar selección ChildNodes de XmlNode forma recursiva? Mi archivo XML se parece a ...

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

Me gustaría para eliminar todos los nodos (tipo de valor) cuando la parentNode es tipo de parámetro con id = "Descripción", pero no de valor notas como hijos de valores o parámetros con id = "valor" En XSLT diría por ejemplo: //value[parent::parameter[@id='description'] and @lang='en']The problema es: tengo el código de idioma: por ejemplo, "De" y ahora me gustaría para eliminar todos los nodos de valor hermano si existe un valor con lang = "de" y eliminar todos los nodos hermanos excluyendo el valor sin ningún lang-atributo si = "de" no existe lang (como fallback) I esperanza, que me puede ayudar a escribir un código C # para sustituir de forma recursiva todos los nodos de valor no deseados.

¿Fue útil?

Solución

Esperamos que esto es lo que you'r buscando.

Si carga you'r XML en un XmlDocument se puede utilizar un método como este para eliminar nodos que emparejan 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);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top