所以我有一个巨大的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。
XmlNodeList nodes = originalXML.SelectNodes("//*[contains(@ItemId,'" + id + "')]");
所以我想删除一些节点,但我只有我想保留的节点的ID。问题是,当您使用selectnodes函数来获取内部节点时,如何保持xml的外部结构?
谢谢!
我会走相反的路:删除你不需要的东西。从头开始构建XmlDocument很困难(需要大量编码)。
我认为您最好从现有结构中删除不需要的节点。
XmlNodeList nodes = originalXML.SelectNodes("/*[not(contains(@test,'test'))]")
foreach(XmlNode node in nodes)
originalXML.RemoveChild(node);
应该起作用。
如果你需要保留你的原始结构,你可以originalXML.Clone()
它。
旁注:你可能想研究一下System.Xml.Linq.XDocument
和System.Xml.Linq.XElement
,我发现它们更容易使用。