我在這裏嘗試從具有2個不同後代的xml文件中提取數據時遇到了一些問題。LINQ從2個不同的XML後裔中選擇特定數據
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Male>
<Person id="1" Name="Joe" Age="35" />
...... Some more data
<Person id="6" Name="Hank" Age="55" />
</Male>
<Female>
<Person id="4" Name="Jane" Age="28" />
...... Some more data
<Person id="9" Name="Jude" Age="32" />
</Female>
所以我想提取後裔女只,所以這裏是我的代碼。
private int personId;
private string personName;
private int personAge
private async void GetPersonDetails()
{
try
{
string personDetail = "http://localhost/people/directory.xml";
HttpClient httpClient = new HttpClient();
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, personDetail
// Send the request to the server
HttpResponseMessage response2 = await httpClient.SendAsync(requestMessage);
// Just as an example I'm turning the response into a string here
string responseAsString = await response2.Content.ReadAsStringAsync();
System.Xml.Linq.XDocument _xdoc = System.Xml.Linq.XDocument.Parse(responseAsString);
var peopleData = from person in _xdoc.Descendants("Female")
select new
{
id = person.Attribute("id").Value,
name = person.Attribute("Name").Value,
age = person.Attribute("Age").Value
};
int peopleIdx = 0;
foreach (var pDetails in peopleData)
{
personId = pDetails.id;
personName = pDetails.name;
personAge = pDetails.age;
peopleIdx++;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
什麼情況是它也提取男性的細節。我怎麼能做到這一點,以獲得女性後代的所有數據?基本上用戶可以搜索男性或女性來獲得結果。
這是一個無效的XML文件。 XML必須有一個根;樣本中有2根。 –
與Metro Smurf指出的問題一樣,您提供的代碼根本不會提取這些值,因爲它在查找名爲「id」,「Name」和「Age」的*屬性*實際上有元素。噢,你正在用一個'person'結束元素關閉一個Person元素。當我們不知道*真實*數據是什麼樣子(或者可能是您的真實代碼)時,很難爲您提供幫助。 –
@JonSkeet我更新了我用來真正從我的xml文件中提取數據的源代碼。如果它只有一個根,那麼我沒有問題拉取數據。那麼你和Metro Smurf建議我應該改變xml格式? – Osirus