2012-03-03 3 views
1

Как получить значение Элемент, внутреннее значение элемента в строковом значении.Как получить значение Inner Element из элементов в xml linq

Мой формат XML является,

<Filters> 
    <filterValues> 
     <filter_id>BN</filter_id> 
     <value>100</value> 
    </filterValues> 
    <filterValues> 
     <filter_id>SRE</filter_id> 
     <value>355</value> 
    </filterValues> 
</Filters> 

В этом XML, я хочу, чтобы получить поле значение, основанное на filter_id собственности. Итак, я написал запрос.

var searchp = 
     from t1 in doc.Elements("filters") 
     where (string)(t1.Elements("filterValues").Elements().Select(elem=>elem.Element("filter_id").Value).ToString()) == "SRE" 
     select new 
     { 
     valuestr=t1.Element("filterValues").Element("value").Value     
     }; 

Pls Help Me.

ответ

2
var sr = new StringReader(@"<Filters> 
            <filterValues> 
             <filter_id>BN</filter_id> 
             <value>100</value> 
            </filterValues> 
            <filterValues> 
             <filter_id>SRE</filter_id> 
             <value>355</value> 
            </filterValues> 
           </Filters>"); 

XElement filters = XElement.Load(sr); 
string filterId = "SRE"; 
var values = filters.Elements().Where(f => f.Element("filter_id").Value == filterId).Select(element => element.Element("value").Value); 
foreach (var value in values) 
{ 
    MessageBox.Show(value); 
} 
+0

Ваш ответ был хорошо. Но у меня больше внутренних элементов в значениях фильтра. Мне нужно получить все внутренние элементы. как это получить. Помогите мне. Извините за последующее объяснение. – user1120998

+0

@ user1120998 Как выглядят эти внутренние элементы? Обновите свой вопрос с помощью XML-образца и я вам поможем. – Meysam

+0

@ user1120998, пожалуйста, обновите вопрос с помощью примера данных, который вы хотите получить, чтобы иметь возможность помочь вам – Alex

1

Было бы проще использовать xpath для поиска ваших узлов. Вы можете использовать метод использования XPathSelectElements для этого:

var doc = XDocument.Parse(xml); 
var nodes = doc.XPathSelectElements("/Filters/filterValues/filter_id[text()='SRE']/following-sibling::value"); 
foreach (var node in nodes) 
{ 
    // here you can use explicit conversion like 
    // var value = (int)node;   if you want to cast the node value to int 
    // var node = (string)node;  or to string 
} 
+0

, какую dll следует добавить для использования XpathSelectElements. В System.xml.linq doest не содержится этот метод – user1120998

+0

@ user1120998: это [метод расширения] (http://msdn.microsoft.com/en-us/library/bb383977.aspx). Вы должны добавить 'using System.Xml.XPath;' к вашим директивам использования. – Alex

Смежные вопросы