【发布时间】:2011-05-09 21:25:34
【问题描述】:
我有一个要求,其中有一个大的 XML 文档。我必须根据某些条件从文档中使用 XPath 选择很多节点。然后在我选择 XmlNodes 之后,我必须将新属性添加到所选节点并将其插入回 XmlDocument 中的许多位置。
我发现当我修改选定的 XmlNode 时,实际的 XmlDocument 也会被修改。 所以我想到在整个选定的 XmlNodes 列表上使用 xmlNode.Clone() 方法。 但是真的非常非常慢。我的意思是有更好的方法吗?还是克隆真的很慢??
顺便说一下,我正在使用 XmlDocument 来加载 Xml 文档。
在此处编辑 :::
我正在为我的问题添加更多详细信息。我使用 C# 语言和 .net 3.5 作为平台。
我已将此 Xml 数据绑定到数据网格并允许用户修改数据网格。基于某些条件,当用户修改数据网格中的单元格时,我必须在 Xml 中选择一些节点,然后创建新节点并将其添加到内存中的 XmlDocument 中。所以在选择对象后,我使用的是 clone(),这对我来说非常慢!!
更多编辑在这里::
原始XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<grids>
<row>
<value actualvalue="test1" id="0001" valuetype="Constant"/> // i want to make copy of this node whose id = 0001 and make some changes to it
<value actualvalue="test2" id="0002" valuetype="String"/>
</row>
</grids>
然后我想修改节点,转换后的 XML 应该如下: 新节点已添加并且 ids 已重新排序。
<?xml version="1.0" encoding="UTF-8"?>
<grids>
<row>
<value actualvalue="test1" id="0001" valuetype="newConstant"/>
<value actualvalue="test1" id="0002" valuetype="Constant"/>
<value actualvalue="test2" id="0003" valuetype="String"/>
</row>
</grids>
希望我的详细信息足够!!
【问题讨论】:
-
这个问题与XPath或查询无关。
-
@Dimitre :我添加了更多细节。我会说可能是 .net 中的功能导致我的性能变慢!
-
@Guru-Charan:这可以通过 XSLT 非常有效地完成。请在您的问题中提供一个示例 XML 文档(尽可能少)和想要的结果,并解释如何将源 XML 文档转换为结果。
-
@Dimitre:我在我的问题中添加了详细信息?我的问题现在更清楚了吗?
-
好问题,+1。请参阅我的答案以获得完整的 XSLT 解决方案。