オブジェクトを作成し、オブジェクトを変更するために使用するXMLファイルがあります。オブジェクトをのXMLファイルに保存します。LINQ-to-XMLを使用してXMLノードにXMLノードを保存する方法は?
次のコードで変更する必要があるので、IDに基づいてXMLからノードを抽出し、そのノードを新しいノードに置き換えてXMLに戻します。
以下は取るコンストラクタが含まれていない私に'System.Xml.Linq.XElement' を提供します '0' 引数の:
//GET ALL SMARTFORMS AS XML
XDocument xmlDoc = null;
try
{
xmlDoc = XDocument.Load(FullXmlDataStorePathAndFileName);
}
catch (Exception ex)
{
HandleXmlFileNotFound(ex);
}
//EXTRACT THE NODE THAT NEEDS TO BE REPLACED
XElement oldElementToOverwrite = xmlDoc.Descendants("smartForm")
.Where(sf => (int)sf.Element("id") == 2)
.Select(sf => new XElement());
//CREATE THE NODE THAT WILL REPLACE IT
XElement newElementToSave = new XElement("smartForm",
new XElement("id", this.Id),
new XElement("idCode", this.IdCode),
new XElement("title", this.Title)
);
//OVERWRITE OLD WITH NEW
oldElementToOverwrite.ReplaceWith(newElementToSave);
//SAVE XML BACK TO FILE
xmlDoc.Save(FullXmlDataStorePathAndFileName);
XMLファイル:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<smartForm>
<id>1</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customerSpecial</idCode>
<title>Edit Customer Special</title>
<description>This form has a special setup.</description>
<labelWidth>200</labelWidth>
</smartForm>
<smartForm>
<id>2</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customersMain</idCode>
<title>Edit Customer</title>
<description>This form allows you to edit a customer.</description>
<labelWidth>100</labelWidth>
</smartForm>
<smartForm>
<id>3</id>
<whenCreated>2008-12-31</whenCreated>
<itemOwner>system</itemOwner>
<publishStatus>published</publishStatus>
<correctionOfId>0</correctionOfId>
<idCode>customersNameOnly</idCode>
<title>Edit Customer Name</title>
<description>This form allows you to edit a customer's name only.</description>
<labelWidth>100</labelWidth>
</smartForm>
</root>
シングルには述語を取るオーバーロードがあるため、 'Where'を使用する必要はありません。 – Noldorin
うわー - 私はそれについて忘れていましたが、実際には別の操作を使用するのがよりわかります:) –