2013-06-24 6 views
0

Возможно ли получить и отредактировать определенное значение xml с помощью 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> 

Есть два 95S от количества == 200 & запас == 100 и количество == 100 & запас == 150. Могу ли я просто получить значение 95 от количества == 200 и акции == 100 и редактировать его без изменения того же 95 из количества == 100 & stock == 150?

Я попытался использовать «SelectSingleNode» и «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(); 
+1

Не могли бы вы показать нам код, который вы используете для чтения XML уже? – horgh

+1

Возможно, вы захотите просмотреть LINQ to Datasets http://msdn.microsoft.com/en-us/library/bb386910.aspx или XPath, если это простой текстовый текст http://msdn.microsoft.com/en-us /library/bb387050.aspx –

+0

IMHO, ваш XML sux. Откуда вы знаете, для чего предназначены «плакаты»? Это просто недостаточно описательно. Вам нужно что-то вроде элемента или атрибута для идентификации каждого . Таким образом, вы можете легко извлечь информацию из него с помощью linq или чего-то еще. – jzm

ответ

1

Используя выражение XPath, и this XML Library:

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 
0

Вы можете использовать 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(); 
}