#c# #xml #linq
#c# #xml #linq
Вопрос:
Я новичок в LINQ to XML, и у меня частично работает следующий пример, но я застрял на том, как прочитать одно из значений элемента, CustomFieldResponse / Values / Value, когда атрибут FieldCode для CustomFieldResponse равен «Bio»
Два других значения ID и WebsiteID читаются нормально, без проблем, и я могу вставить их в свою таблицу SQL. Но я понятия не имею, как ссылаться на значение для Bio.
<members>
<member>
<ID>BF175DE0</ID>
<WebsiteID>19186</WebsiteID>
<CustomFieldResponses>
<CustomFieldResponse FieldCode="Bio" Visibility="">
<Values>
<Value>This is the value i am trying to put in bio</Value>
</Values>
</CustomFieldResponse>
<CustomFieldResponse FieldCode="facebook" Visibility="">
<Values>
<Value>http://facebook.com/myidhere</Value>
</Values>
</CustomFieldResponse>
</CustomFieldResponses>
</member>
</members>
string ID, WebsiteID;
XElement xelement = XElement.Load("members.xml");
IEnumerable<XElement> members = xelement.Elements();
foreach (var member in members)
{
ID = member.Element("ID").Value;
WebsiteID = member.Element("WebsiteID").Value;
var bio = from a in member.Elements("CustomFieldResponses")
from b in a.Elements("CustomFieldResponse")
where b.Attribute("FieldCode").Value == "Bio"
from c in b.Elements("Values")
select new { bio = c.Element("Value").Value };
SqlCommand dataCommand = new SqlCommand("INSERT Members (ID, WebsiteID, Bio) VALUES ('" ID "','" WebsiteID "','" bio "')", dataConnection);
dataCommand.ExecuteNonQuery();
}
Ответ №1:
Как насчет использования XPath?
var xpathQuery = "//CustomFieldResponse[@FieldCode='Bio']/Values/Value";
var val = xelement.XPathSelectElement(xpathQuery);
или с чистым Linq2Xml
var value = (string)xelement.Descendants("CustomFieldResponse")
.Where(x => (string)x.Attribute("FieldCode") == "Bio")
.Descendants("Value")
.FirstOrDefault();
Ответ №2:
Как насчет этого:
var bio = (from fieldResponseCollection in member.Elements("CustomFieldResponses")
from fieldResponse in fieldResponseCollection.Elements("CustomFieldResponse")
from responseValue in fieldResponse.Elements("Values")
select responseValue.Element("Value")
where fieldResponse.Attribute("FieldCode").Value == "Bio")
.First();