XmlNode.RemoveChild () récursive
-
02-10-2019 - |
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.
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);
}
}