0

以下のXMLデータを変更したい:

<?xml version="1.0" encoding="utf-8"?> 
<allitems>   
  <item ID="17997" quantity="three">     
    <available>Y</available>     
    <last_modified_price>300</last_modified_price>     
    <edition>2008<edition>     
  <item>
  <item ID="18039" quantity="two">     
    <available>Y</available>     
    <last_modified_price>250</last_modified_price>     
    <edition>2010<edition>     
  <item>
</allitems>

すべての要素の値は、実行時の設定に従って変更する必要があります....

このために、次のコードを使用しましたが、データは変更されていません。解決策を得るのを手伝ってください。

 XmlDocument modifydoc = new XmlDocument();
 modifydoc.Load(@"E:\XMLapp\XMLstorageWEB\patrick\XMLFile1.xml");
 var root = modifydoc.GetElementsByTagName("allitems")[0];
 var oldelem = root.SelectSingleNode("item[@ID =" + txt_id.Text + "]");
 var newelem = modifydoc.CreateElement("item");
 root.ReplaceChild(newelem, oldelem);
 while (oldelem.ChildNodes.Count != 0)
  {
      XmlElement available= modifydoc.CreateElement("available");
       available.InnerText = ddl_available.SelectedItem.Text;
      XmlElement last_modified_price= modifydoc.CreateElement("last_modified_price");
       last_modified_price.InnerText = ddl_last_modified_price.SelectedItem.Text;
      XmlElement edition= modifydoc.CreateElement("edition");
      edition.InnerText = ddl_edition.SelectedItem.Text;
      newelem.AppendChild(available);
      newelem.AppendChild(last_modified_price);
      newelem.AppendChild(edition);
      modifydoc.DocumentElement.AppendChild(newelem);
  }
   while (oldelem.Attributes.Count != 0)
  {
     newelem.Attributes.Append(oldelem.Attributes[0]);
  }
   modifydoc.Save(@"E:\XMLapp\XMLstorageWEB\patrick\XMLFile1.xml");

解決策を教えてください..

4

2 に答える 2

0

これは小さくて簡単な例です。[web.config] の connectionString 値を変更するために使用します。お役に立てば幸いです。あなたのコードに適応するのはとても簡単です;-)

                    System.Xml.XmlDocument myXmlDocument = new System.Xml.XmlDocument();
                    myXmlDocument.Load("myFullPathWebConfig.xml");
                    foreach (System.Xml.XmlNode node in myXmlDocument["configuration"]["connectionStrings"])
                    {
                        if (node.Name == "add")
                        {
                            if (node.Attributes.GetNamedItem("name").Value == "SCI2ConnectionString")
                            {
                                node.Attributes.GetNamedItem("connectionString").Value = connectionString;
                            }
                        }
                    }
于 2013-10-02T09:58:38.247 に答える
0

XmlNode を追加および削除する最もクリーンな方法ではありませんが、コードを修正するだけで、これがあなたが望むものだと思います

var txt_id = "17997";
XmlDocument modifydoc = new XmlDocument();
modifydoc.Load(@"c:\temp\so\1.xml");
var root = modifydoc.GetElementsByTagName("allitems")[0];
var oldelem = root.SelectSingleNode("item[@ID =" + txt_id + "]");
var newelem = modifydoc.CreateElement("item");
root.ReplaceChild(newelem, oldelem);

XmlElement available= modifydoc.CreateElement("available");
available.InnerText = "CambiameInnerText";
XmlElement last_modified_price= modifydoc.CreateElement("last_modified_price");
last_modified_price.InnerText = "LastModifed";
XmlElement edition= modifydoc.CreateElement("edition");
edition.InnerText = "SelectedItem";
newelem.AppendChild(available);
newelem.AppendChild(last_modified_price);
newelem.AppendChild(edition);
modifydoc.DocumentElement.AppendChild(newelem);


foreach (XmlAttribute attribute in oldelem.Attributes)
{
newelem.SetAttribute(attribute.Name, attribute.Value);
}

あなたのxmlは正しくありません、少なくとも例

<?xml version="1.0" encoding="utf-8"?> 
<allitems>   
  <item ID="17997" quantity="three">     
    <available>Y</available>     
    <last_modified_price>300</last_modified_price>     
    <edition>2008</edition>     
  </item>
  <item ID="18039" quantity="two">     
    <available>Y</available>     
    <last_modified_price>250</last_modified_price>     
    <edition>2010</edition>     
  </item>
</allitems>
于 2013-10-01T15:25:35.790 に答える