我試圖使用c#解析來自聯合國網站(http://www.un.org/sc/committees/1267/AQList.xml)的XML文件。解析C中的UN XML文件#
我經常用這個文件有一個問題,那就是從一個< .INDIVIDUAL。>標籤到另一個標籤的子標籤數量不同。一個例子是< .FORTH_NAME。>子標籤。
我試過了很多不同的方法,但不知何故,我似乎總是陷入同樣的問題,這是< .INDIVIDUAL。>標記中的不同數量的子標記。
我想要實現的是收集所有的標籤和它們的值在一個< .INDIVIDUAL。>標籤下,然後只插入我想要的數據到我的數據庫中。如果缺少一個標籤,例如< .FOURTH_NAME。>,那麼我只需要將前三個名稱插入數據庫中,並跳過第四個。
我使用LINQ to XML試過了,這裏有一些例子:
XDocument xdoc = XDocument.Load(path);
var tags = (from t in xdoc.Descendants("INDIVIDUALS")
from a in t.Elements("INDIVIDUAL")
select new
{
Tag = a.Name,
val = a.Value
});
foreach (var obj in tags)
{
Console.WriteLine(obj.Tag + " - " + obj.val + "\t");
//insert SQL goes here
}
或:
但是這一次只收集非空FOURTH_NAME標籤...
var q = (from c in xdoc.Descendants("INDIVIDUAL")
from _1 in c.Elements("FIRST_NAME")
from _2 in c.Elements("SECOND_NAME")
from _3 in c.Elements("THIRD_NAME")
from _4 in c.Elements("FOURTH_NAME")
where _1 != null && _2 != null && _3 != null && _4 != null
select new
{
_1 = c.Element("FIRST_NAME").Value,
_2 = c.Element("SECOND_NAME").Value,
_3 = c.Element("THIRD_NAME").Value,
_4 = c.Element("FOURTH_NAME").Value
});
foreach (var obj in q)
{
Console.WriteLine("Person: " + obj._1 + " - " + obj._2 + " - " + obj._3 + " - " + obj._4);
//insert SQL goes here
}
任何想法??
這是非常好的,樂於助人。有沒有一種方法可以動態讀取標籤,而不用硬編碼這些標籤:first_name,second等? – Alex
當然,你可以使用像data.Descendants(「INDIVIDUAL」)。Elements()。這裏(i => i.Name.LocalName.EndsWith(「_ NAME」))。Select(i = > new {FieldName = i.Name.LocalName,Value = i.Value});'您可能想要爲每個人添加分組操作或子選擇。您可以根據您的業務需求來處理解析。看起來他們的數據需要一些標準化。某些情況下,您可能需要先分割多個名稱。 –
謝謝吉姆,這是我所需要的...... – Alex