【发布时间】:2014-11-04 04:23:15
【问题描述】:
我正在尝试从 Microsoft Dynamics 环境中将一些 SQL 数据提取到 XML,我目前正在使用 C# 中的 LINQ To XML 来读取和写入我的 XML 文件。我需要的一条数据来自一个名为 SECURITYSUBROLE 的视图。查看此视图的结构可以发现有一个列也名为 SECURITYSUBROLE。我的正常提取方法给了我这个 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 节点与子节点具有相同的名称。这是导入方法的sn-p:
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应该没问题。
标签: c# .net xml linq-to-xml