我想從Microsoft Dynamics環境中將一些SQL數據提取到XML,我目前在C#中使用LINQ to XML來讀取和寫入我的XML文件。我需要的一個數據是來自SECURITYSUBROLE的視圖。查看此視圖的結構顯示,還有一個名爲SECURITYSUBROLE的列。我的常規提取方法給了我這個XML。當XML父和子節點具有相同名稱時如何使用LINQ to XML
<SECURITYSUBROLE>
<SECURITYROLE>886301</SECURITYROLE>
<SECURITYSUBROLE>886317</SECURITYSUBROLE>
<VALIDFROM>1900-01-01T00:00:00-06:00</VALIDFROM>
<VALIDFROMTZID>0</VALIDFROMTZID>
<VALIDTO>1900-01-01T00:00:00-06:00</VALIDTO>
<VALIDTOTZID>0</VALIDTOTZID>
<RECVERSION>1</RECVERSION>
<RECID>886317</RECID>
</SECURITYSUBROLE>
當我嘗試稍後導入此數據,我得到錯誤,因爲父XML節點具有相同的名稱作爲子節點。下面是導入方法的一個片段:
XmlReaderSettings settings = new XmlReaderSettings();
settings.CheckCharacters = false;
XmlReader reader = XmlReader.Create(path, settings);
reader.MoveToContent();
int count = 1;
List<XElement> xmlSubset = new List<XElement>();
while (reader.ReadToFollowing(xmlTag))
{
if (count % 1000 == 0)
{
xmlSubset.Add(XElement.Load(reader.ReadSubtree()));
XDocument xmlTemp = new XDocument(new XElement(xmlTag));
foreach (XElement elem in xmlSubset)
{
xmlTemp.Root.Add(elem);
}
xmlSubset = new List<XElement>();
ImportTableByName(connectionString, tableName, xmlTemp);
count = 1;
}
else
{
xmlSubset.Add(XElement.Load(reader.ReadSubtree()));
count++;
}
}
}
它目前沒有在XmlReader.ReadToFollowing,它不知道下次去因爲這個名字混淆。所以我的問題有兩個部分:
1)有沒有更好的方法來提取此數據,而不是XML?
2)有沒有通過LINQ To XML的方式,我可以以某種方式區分名爲完全相同的父節點和子節點?
讓我猜猜,你使用'Descendants'方法?使用'Elements'來代替,你應該沒問題。 – MarcinJuraszek 2014-11-04 04:31:54