Я пытаюсь извлечь некоторые данные SQL в XML из среды Microsoft Dynamics, в настоящее время я использую LINQ To XML в C# для чтения и записи на мой XML-файлы. Мне нужна часть данных из вида SECURITYSUBROLE. Глядя на структуру этого представления, видно, что есть столбец с именем SECURITYSUBROLE. Мой нормальный метод извлечения дал мне этот XML.Как использовать LINQ to XML, когда родительский и дочерний узлы 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'? Вместо этого используйте «Элементы», и все должно быть в порядке. – MarcinJuraszek