2010-04-30 2 views
0

내 문제는 다음과 같습니다. XmlNode에서 재귀 적으로 선택된 ChildNodes를 제거하려면 어떻게해야합니까? 내 XML 파일을 찾습니다 ... 같은XmlNode.RemoveChild() recursive

..<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 = "설명"과 매개 변수의 유형이고 모든 노드 (값 유형)를 제거하려는

또는 매개 변수가 id = "value"인 XSLT에서 예를 들어 다음과 같이 말합니다 : //value[parent::parameter[@id='description'] and @lang='en'] 문제 : 언어 코드 있음 : 예 "de"그리고 lang = "de"가있는 값이 있으면 형제 값 노드를 모두 제거하고 lang = "de"가없는 경우 lang-attribute없이 값을 제외한 모든 형제 노드를 제거합니다 (fallback으로). 희망, 당신은 재귀 적으로 모든 바람직하지 않은 값 노드를 대체하기 위해 C# 코드를 작성하도록 도와 줄 수 있습니다.

답변

3

바라건대 이것은 당신이 찾고있는 것입니다.

XmlDocument에 xml을로드하면 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); 
    } 
}