【问题标题】:XML Parsing - Removing nodes and keeping the overall structureXML Parsing - 移除节点并保持整体结构
【发布时间】:2013-12-12 14:40:51
【问题描述】:

所以我有一个庞大的 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。 问题是如何保持一个xml的外部结构,当你使用selectnodes函数来获取内部节点?

谢谢!

【问题讨论】:

  • 你为什么不只是有一个没有项目的 XML 模板并根据需要在文档中动态添加项目?这有意义吗?

标签: c# xml xmlnode xmlnodelist


【解决方案1】:

我会采取相反的方式:删除你不需要的东西。从头开始构建 XmlDocument 很困难(需要大量编码)。

【讨论】:

    【解决方案2】:

    我认为最好从现有结构中删除不需要的节点。

    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,我发现它们更容易使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多