から、私は与えられた構造を持つXMLがあります(ただし、指定されたIDを持つどの要素が存在しない場合のみ)C#の - 挿入XML要素の文字列テンプレート
<ArrayOfElement>
<Element>
<ID>1</ID>
<Value>Value1</Value>
</Element>
<Element>
<ID>2</ID>
<Value>Value2</Value>
</Element>
<Element>
<ID>3</ID>
<Value>Value3</Value>
</Element>
...
</ArrayOfElement>
をそして私は、このテンプレートを使用して、別の要素を挿入します:
<Element>
<ID>$ID$</ID>
<Value>$VALUE$</Value>
</Element>
だから私のアイデアはstring
としてテンプレートをロードし、与えられているものは何でもにより$ID$
と$VALUE$
を交換しました。次に、この文字列をXmlDocumentFragment
として解析します。そして、このIDを持つ要素が既に存在するかどうかを確認する必要があります。存在しない場合にのみ、新しいIDを挿入します。
しかし、私はそれが存在するかどうかを見つける方法を知りません。
私の現在のアプローチは次のとおりです。
// Load the XML with the ArrayOfElement
var allElements = new XmlDocument();
allElements.Load("file.xml");
// Load the template and insert id and value
var xmlTemplate = File.ReadAllText("template.xml");
var fragment = allElements.CreateDocumentFragment();
fragment.InnerXml = xmlTemplate.Replace("$ID$", _id).Replace("$VALUE$", _value);
// This does not work since it will throw an exception if none is found:
if (allElements.SelectNodes("ArrayOfElement/Element/ID/text() = '" + _id + "'").Count == 0)
{
allElements.appendChild(fragment);
}
はまた、私は本当にテンプレートファイルを使用したい、私は実際にテンプレート文字列なしでC#でこれらのXMLタグを追加すると、多くの仕事への道になり、より複雑なシナリオを持っているので、 。
アプローチを最適化することができます。まずフラグメント要素を作成して元のXMLを検索する代わりに、元のXMLを検索してから、作成と挿入を行うことができます。 – Gururaj
私は知っていますが、それは私の問題で私を助けません – danielspaniol