xmlドキュメント内には、次のものがあります
...
<TablixMembers>
<TablixMember>
<Group Name="Details" />
</TablixMember>
</TablixMembers>
</TablixMember>
<TablixHeader Name="MyField3" />
<TablixHeader Name="MyField2" />
</TablixMembers>
</TablixMember>
フィールド名 ("MyField3、MyField2、...) を持つ各要素を探す for ループがあります。
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 は、選択した属性名の現在の Tablix ノードを挿入して置き換える必要がある大きな xml 要素テンプレートを含むメモリ ストリームです。
このコードを実行すると、ノードは置き換えられません。実際には何も起こりません。ノードにブレークポイントを設定しました。xml 例外はスローされず、そのまま処理されます。メソッドを間違って呼び出しているか、単一のノードを選択したことが原因で要素が置き換えられていないと思います。
また、大きなxml構造の注入が原因である可能性があると考えましたが、次のような単一の要素のみを使用してこれをテストしました:
newnode.ReplaceWith(new XElement(ns + "Size"));// ns is the xml namespace for the schema I am using
これにより、要素が置き換えられることもありませんでした。
私が間違っている可能性があることについて、誰かが洞察を提供できますか?
-乾杯