2013-12-12 14 views
1

그래서 난이 유사한 구조를 포함하는 대규모 XML 파일이 전체 구조 유지 :XML 구문 분석 - 노드를 제거하고

<Item ItemId=";ResTVersion" ItemType="0" PsrId="245" Leaf="false"> 
    <Disp Icon="Str" Expand="true" Disp="true" LocTbl="false" Order="13352" /> 
    <Modified By="sachink" DateTime="2008-12-16T19:02:35Z" /> 
    <PsrProps> 
     <Str Name="Kii" Val="yyyyyyyyyyyyy" /> 
    </PsrProps> 
    <Item ItemId=";ResTFileVersion" ItemType="0;ResT" PsrId="245" InstFlg="true" Leaf="true"> 
     <Str Cat="Text" UsrLk="true"> 
     <Val><![CDATA[ttttttttt]]></Val> 
     <Tgt Cat="Text" Orig="New"> 
      <Val><![CDATA[ttttttttt]]></Val> 
     </Tgt> 
     </Str> 
     <Disp Icon="Str" Order="13353" /> 
     <Modified By="sachink" DateTime="2008-12-16T19:02:35Z" /> 
     <Cmts> 
     <Cmt Name="Dev"><![CDATA[{Locked}]]></Cmt> 
     </Cmts> 
    </Item> 
    <Item ItemId=";ResTLanguageTag" ItemType="0;ResT" PsrId="245" InstFlg="true" Leaf="true"> 
     <Str Cat="Text" UsrLk="true"> 
     <Val><![CDATA[en-US]]></Val> 
     <Tgt Cat="Text" Orig="New"> 
      <Val><![CDATA[en-US]]></Val> 
     </Tgt> 
     </Str> 
     <Disp Icon="Str" Order="13354" /> 
     <Modified By="sachink" DateTime="2008-12-16T19:02:35Z" /> 
     <Cmts> 
     <Cmt Name="Dev"><![CDATA[=.ABVUDHUIDSHFUIDSHFUISHDFUIDSH iusdhfUIHAs]]></Cmt> 
     </Cmts> 
    </Item> 
    </Item> 

나는 여러 항목 ID를 가지고 있고 새로운 XML을 생성 할을 그 오래된 구조를 존중합니다. 이 코드를 사용하여 원하는 노드를 검색 한 다음 새 XML을 만듭니다.

그럼 내가 원하는 것은 노드를 제거하는 것입니다.하지만 유지하고자하는 노드의 ID 만 가지고 있습니다. 문제는 selectnodes 함수를 사용할 때 내부 노드를 가져 오기 위해 xml의 외부 구조를 유지하는 방법입니다.

감사합니다.

+0

왜 항목이없는 XML 템플릿을 가지고 필요에 따라 문서에 항목을 동적으로 추가하지 않는 것이 좋을까요? 말이 돼 ? –

답변

0

나는 반대 방향으로 갈 것입니다. 필요없는 것을 제거하십시오. 처음부터 XmlDocument를 만드는 것은 어렵습니다 (코딩이 많이 필요함).

0

나는 이미 가지고있는 구조에서 원하지 않는 노드를 제거하는 것이 더 나을 것이라고 생각합니다.

XmlNodeList nodes = originalXML.SelectNodes("/*[not(contains(@test,'test'))]") 
foreach(XmlNode node in nodes) 
    originalXML.RemoveChild(node); 

이 작동해야합니다.

원래 구조를 유지해야하는 경우 originalXML.Clone() 수 있습니다.

사이드 노트 : System.Xml.Linq.XDocumentSystem.Xml.Linq.XElement을보고 싶을 수도 있습니다. 사용하기가 훨씬 쉽습니다.