2013-10-23 106 views
-1

我有以下XML,我需要通过搜索模式的价值和STORENAME值如何阅读C#中的复杂XML?

<?xml version="1.0" encoding="utf-8"?> 
<Results> 
<Product> 
    <Model>X-180</Model> 
    <Prices> 
    <Price value="180.0" StoreName="StoreA" /> 
    <Price value="181.0" StoreName="StoreB" /> 
    <Price value="181.0" StoreName="StoreC" /> 
    </Prices> 
</Product> 
<Product> 
    <Model>LB621120S</Model> 
    <Prices> 
    <Price value="2100.0" StoreName="StoreD" /> 
    <Price value="2120" StoreName="StoreF" /> 
    <Price value="4050" StoreName="StoreG" /> 
    </Prices> 
</Product> 
</Results> 

例如,以获得价格: 如果我运行一个函数来获取的模型=“LB621120S”的价格和StoreName =“StoreF” 我应该得到的价格:2120

这是可能的XmlTextReader?

+7

很可能,你尝试过什么但这是给你的问题? –

+0

[如何从C#中的XML读取键值]的可能重复(http://stackoverflow.com/questions/5893884/how-to-read-key-value-from-xml-in-c-sharp) – mbeckish

+0

欢迎去吧!但像这样的问题很容易通过一些使用Google搜索 – jltrem

回答

1

试试这个:

var reader = new XmlTextReader(<XmlPathFileName>); 
var doc = new XmlDocument(); 
doc.Load(reader); 
reader.Close(); 

var root = doc.DocumentElement; 
     if (root == null) 
      return; 

var node = root.SelectSingleNode("/Results/Product[Model='LB621120S']/Prices/Price[@StoreName='StoreF']"); 
3

这个XPath将返回Price元素你想要的:

/Results/Product[Model='LB621120S']/Prices/Price[@StoreName='StoreF'] 
+0

和[如何使用Visual C#使用XPath表达式查询XML](http://support.microsoft.com/kb/308333) – jltrem

0
xdoc.Descendants("Product") 
    .Where(p => (string)p.Element("Model") == model) 
    .Elements("Price") 
    .Where(p => (string)p.Attribute("StoreName") == store) 
    .Select(p => (decimal)p.Attribute("value")) 
    .FirstOrDefault(); 
1

使用LINQ:

XDocument doc = XDocument.Parse(xml); 

var value = 
    doc.Descendants("Product") 
    .First(p => p.Descendants("Model").First().Value == "LB621120S") 
    .Descendants("Price") 
     .First(p => p.Attribute("StoreName").Value == "StoreF") 
     .Attribute("value").Value;