C# XmlNode.RemoveChild()递归
我的问题如下: 如何从XmlNode递归删除选定的子节点?我的XML文件看起来像C# XmlNode.RemoveChild()递归,c#,xmlnode,removechild,C#,Xmlnode,Removechild,我的问题如下: 如何从XmlNode递归删除选定的子节点?我的XML文件看起来像 ..<element type="TextBox" id="xslFilePath"> <parameters> <parameter id="description"> <value><![CDATA[Pfad zur XSL]]>&l
..<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>...
。。
...
我想删除所有节点(值类型),其中parentNode是id=“description”的参数类型,而不是XSLT中id=“value”的值或参数的子节点value notes,例如:
//value[parent::parameter[@id='description']和@lang='en']
问题是:我有语言代码:例如“de”现在,如果存在lang=“de”值,我想删除所有同级值节点;如果lang=“de”不存在,我希望删除所有同级节点(不包括没有任何lang属性的值),您可以帮助我编写一个c代码,以递归方式替换所有不需要的值节点。希望这就是您要寻找的
如果将xml加载到XmlDocument
中,可以使用类似这样的方法删除与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);
}
}
希望这就是你想要的 如果将xml加载到
XmlDocument
中,可以使用类似这样的方法删除与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);
}
}