Я бы сделал это, используя XDocument
, но без LINQ, если вы не ожидаете, что общая структура документа изменится.
var publicKey = (string)xDoc.Root.Element("PublicKey");
var agentGuid = (Guid)xDoc.Root.Element("AgentGUID");
Если вы знаете, что существует только один экземпляр данного тегапроще получить этот экземпляр, чем вызывать метод, который выбирает все теги с данным именем, а затем извлекать единственное значение из полученного IEnumerable<>
.
Однако ваш исходный код был почтиright.
IEnumerable<string> publicKeys =
from item in xDoc.Descendants("PublicKey")
select (string)item;
Но тогда вам нужно выполнить это с помощью:
string publicKey = publicKeys.First();
Тип XElement
определяет пользовательские операторы преобразования для многих различных примитивных типов.У него есть свойство Value
, которое возвращает строку, так что вы можете использовать его и вообще не иметь никакого приведения, если строка - то, что вам нужно - но часто удобнее просто привести XElement
, содержащий значение непосредственно ктип данных вы хотите.
Обновление
Если вам нужно XmlDocument
, вы можете преобразовать XDocument
, как это ...
var doc = new XmlDocument();
doc.Load(xDoc.CreateReader());
Однако, вероятно, более эффективно просто использовать XmlDocument
для начала, даже если это менее удобно.Один из способов получить те же значения из XmlDocument
выглядит следующим образом:
var publicKey = doc.GetElementsByTagName("PublicKey")[0].InnerText;
var agentGuid = new Guid(doc.GetElementsByTagName("AgentGUID")[0].InnerText);