2012-03-03 186 views
1

如何獲取元素,字符串值中的內部元素值。如何從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     
     }; 

請幫我。

回答

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 2012-03-05 04:25:14

+0

@ user1120998這些內部元素是什麼樣的?用示例XML更新您的問題,我會幫助您。 – Meysam 2012-03-05 06:02:54

+0

@ user1120998請更新與您想收到的數據示例的問題,以便能夠幫助您 – Alex 2012-03-05 08:04:01

1

使用xpath來找到您的節點會更容易。您可以使用XPathSelectElements entension方法:

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

要爲XpathSelectElements的使用添加什麼dll。在System.xml.linq doest不包含此方法 – user1120998 2012-03-05 12:02:57

+0

@ user1120998:這是[擴展方法](http://msdn.microsoft.com/en-us/library/bb383977.aspx)。你應該添加'使用System.Xml.XPath;'到你的使用指令。 – Alex 2012-03-05 12:10:06