2013-12-12 1 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> 

У меня есть несколько записей записи, и я хочу, чтобы создать новый XML, что уважает старую структуру. Я использую этот код для извлечения нужных узлов, а затем создаю новый XML.

XmlNodeList nodes = originalXML.SelectNodes("//*[contains(@ItemId,'" + id + "')]"); 

Так что я хочу удалить некоторые узлы, но у меня есть только те из них, которые я хочу сохранить. Проблема заключается в том, как сохранить внешнюю структуру xml, когда вы используете функцию selectnodes, чтобы получить внутренние узлы?

Спасибо!

+0

Почему у вас просто нет шаблона XML без элементов и динамически добавлять элементы в документ по мере необходимости? Имеет ли это смысл ? –

ответ

0

Я бы пошел наоборот: удалите то, что вам не нужно. Трудно построить XmlDocument с нуля (требуется много кодирования).

0

Я думаю, вам будет лучше удалять узлы, которые вы не хотите, из структуры, которую вы уже имеете.

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

должно работать.

Если вам нужно сохранить исходную структуру, вы можете originalXML.Clone().

Sidenote: Возможно, вы захотите изучить System.Xml.Linq.XDocument и System.Xml.Linq.XElement. Я считаю, что эти функции намного проще в использовании.