我的问题是:如何递归地从XmlNode中删除选定的ChildNodes?我的XML文件看起来像...
..<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=”的参数类型,而不是值-注释作为值的子节点或者在XSLT中具有id=“id=”的参数。例如://value[parent::parameter[@id='description'] and @lang='en']
问题是:我有语言代码:例如"de“,现在如果lang=为”de“的值存在,我想删除所有兄弟节点,如果lang="de”不存在(作为备用),我希望删除不包含任何lang属性的值之外的所有兄弟节点。您可以帮助我编写一个c#代码来递归替换所有不需要的值节点。
发布于 2010-04-30 12:52:30
希望这就是你要找的。
如果将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);
}
}
https://stackoverflow.com/questions/2744447
复制