如何从特定节点的xml中检索值并再次更新xml

时间:2009-11-04 10:46:56

标签: asp.net xml

<?xml version="1.0"?>
     <Image>    
        <Overview>13</Overview>  
        <Gallery1>1</Gallery1>    
        <Gallery2>4</Gallery2>
        <Gallery3>6</Gallery3>    
        <Gallery4>1</Gallery4>
     </Image>

这是我的xml文件。 我有一个带值的下拉值(gallery1,gallery2,gallery3等)。 如果用户在文本框中选择gallery2并键入5 然后单击确定按钮,然后我需要加载上面的XML文件并检查我们需要更新的库值。但首先我们需要从XML中获取值。

这里我试图更新gallery2所以首先我需要获取gallery2值(4) 然后使用旧值(5 + 4 = 9)添加新值,然后保存。所以现在gallery2将包含值9。

结果

 <?xml version="1.0"?>
     <Image>    
        <Overview>13</Overview>  
        <Gallery1>1</Gallery1>    
        **<Gallery2>9</Gallery2>**
        <Gallery3>6</Gallery3>    
        <Gallery4>1</Gallery4>
     </Image>

2 个答案:

答案 0 :(得分:1)

我认为你在寻找的是

 protected void Button12_Click(object sender, EventArgs e)
    {
        lbl = GetLabel(275, 20);
        //Declare and load new XmlDocument
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(MapPath("XmlSample.xml"));
        //delete a mode
        XmlNode node;
        node = xmlDoc.SelectSingleNode("//Image");
        node.ParentNode.RemoveChild(node);
        //create a node and add it
        XmlElement newElement =
        xmlDoc.CreateElement("myNewElement");
        node = xmlDoc.SelectSingleNode("//Image");
        node.ParentNode.InsertAfter(newElement, node);
        xmlDoc.Save(MapPath("XmlSampleModified.xml"));
    }

答案 1 :(得分:0)

此方法的更通用版本会将整个XPath带到您想要更改的元素,而不是仅仅假设它是顶级Image元素的子元素。

private void AddElementValue(XmlDocument doc, string tagName, int valueToAdd)
{
   XmlElement elm = doc.SelectSingleElement("/Image/" + tagName);
   Debug.Assert(elm != null, "Didn't find " + tagName);
   int currentValue;
   if (int.TryParse(elm.InnerText, out currentValue))
   {
      elm.InnerText = (currentValue + valueToAdd).ToString();
      return;
   }
   Debug.Fail(elm.InnerText + " can't be parsed as an integer.");       
}