如何获取和编辑xml的特定值

本文关键字:xml 编辑 何获取 获取 | 更新日期: 2023-09-27 18:19:47

使用asp.c#可以获取和编辑xml的特定值吗?例如,我的xml文件:

<posters>
  <poster>
    <quantity>100</quantity>
    <stock>100</stock>
    <price>88</price>
  </poster>
  <poster>
    <quantity>100</quantity>
    <stock>150</stock>
    <price>95</price>
  </poster>
  <poster>
    <quantity>200</quantity>
    <stock>100</stock>
    <price>95</price>
  </poster>
  <poster>
    <quantity>200</quantity>
    <stock>150</stock>
    <price>100</price>
  </poster>
</posters>

从数量==200&库存==100并且数量==100&库存==150。我可以从数量==200和库存==100中得到值95,然后编辑它而不修改数量==100&库存==150?

我试着使用"SelectSingleNode"answers"SelectNode",但它们对我没有帮助。我想得到类似sql的结果——"从海报中选择价格,其中数量=200,库存=100"。

有什么建议吗?

Xml到数据集:

string xmlDocString = Server.MapPath("MyXMLFile.xml");
    DataSet dataSet = new DataSet();
    dataSet.ReadXml(xmlDocString);
    GridView1.DataSource = dataSet.Tables[0].DefaultView;
    GridView1.DataBind();

如何获取和编辑xml的特定值

使用XPath表达式和这个XML库:

int quantity = 200;
int stock = 100;
int newPrice = 55;
XElement root = XElement.Load(file);
XElement poster = root.XPathElement("//poster[quantity={0} and stock={1}]", 
                                    quantity, stock);
poster.Set("price", newPrice, false); // false for set child ELEMENT value

您可以使用LINQ to XML。它将允许您拥有"类似sql"的代码

以下是在LINQPad 中工作的代码示例

void Main()
{
    var xml = @"<posters>
  <poster>
    <quantity>100</quantity>
    <stock>100</stock>
    <price>88</price>
  </poster>
  <poster>
    <quantity>100</quantity>
    <stock>150</stock>
    <price>95</price>
  </poster>
  <poster>
    <quantity>200</quantity>
    <stock>100</stock>
    <price>95</price>
  </poster>
  <poster>
    <quantity>200</quantity>
    <stock>150</stock>
    <price>100</price>
  </poster>
</posters>";
    var doc = XDocument.Parse(xml);
var value = (from x in doc.Descendants("poster")
        where x.Element("stock").Value == "100" 
        && x.Element("quantity").Value == "200"
        select x.Element("price")).FirstOrDefault();
    if (value != null)
        value.SetValue("1000");
    value.Dump();
    doc.Dump();
}