在 xml 文档中,我有以下内容
...
<TablixMembers>
<TablixMember>
<Group Name="Details" />
</TablixMember>
</TablixMembers>
</TablixMember>
<TablixHeader Name="MyField3" />
<TablixHeader Name="MyField2" />
</TablixMembers>
</TablixMember>
我有一个 for 循环,用于查找具有字段名称的每个元素(“MyField3,MyField2,...)
for (int g = 0; g < remainingtotals; g++)
{
groupTotals.Reverse();
ff.Add(new XElement(ns + "TablixHeader"));
ff.Descendants(ns + "TablixHeader").Last().SetAttributeValue("Name", groupTotals[g]);
string nName = GenerateUniqueName("Nsted");
while (ff.Descendants(ns + "TablixHeader").Any(n => (string)n.Attribute("Name") == groupTotals[g]))
{
var newnode = ff.Descendants(ns + "TablixHeader").Where(n => (string)n.Attribute("Name") == groupTotals[g]).Single();
newnode.ReplaceWith(new XElement(tGroupHeader));
}
groupTotals.Reverse();
}
在这个循环中,我有一个List<string> groupTotals
保存字段名称的。它可能不需要处于while
循环中(我添加了这个用于测试)我有一个查询来查找特定字段
var newnode = ff.Descendants(ns + "TablixHeader").Where(n => (string)n.Attribute("Name") == groupTotals[g]).Single();
newnode.ReplaceWith(new XElement(tGroupHeader));
这设置 newnode 等于:
<TablixHeader Name="MyField3" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition" />
在下一行我试图用新的 xml 元素结构替换这个节点
newnode.ReplaceWith(new XElement(tGroupHeader));
tGroupHeader 是一个内存流,其中包含一个大型 xml 元素模板,应插入并替换所选属性名称的当前 tablix 节点。
当此代码运行时,节点不会被替换。实际上什么都没有发生,我在节点上设置了断点,没有引发 xml 异常,它只是直接通过它。我假设我要么不正确地调用该方法,要么选择单个节点是导致它不替换元素的原因。
我还认为这可能是由于注入了一个大型 xml 结构,但我也只使用一个元素进行了测试,例如:
newnode.ReplaceWith(new XElement(ns + "Size"));// ns is the xml namespace for the schema I am using
这也没有导致元素被替换。
谁能提供一些关于我可能做错了什么的见解?
-干杯