У меня есть XML-строка, сохраненная в устаревшей базе данных, которую я пытаюсь проанализировать.Я могу получить строку, но у меня 2 проблемы с получением нужных мне значений.Во-первых, пример xml.
<?xml version="1.0" encoding="utf-16"?>
<email>
<meta>
<smartForm>
<unit name="ForgotUsername" label="Forgot Username Email">
<textBox name="FromEmail" label="From Email" type="Email" />
<textBox name="FromName" label="From Name" type="100" />
<textBox name="BccEmail" label="BCC" type="EmailList" />
<textBox name="Subject" label="Subject" type="300" />
<textBox2 name="TextBody" label="Body" type="Memo" />
</unit>
<unit name="ForgotPassword" label="Forgot Password Email">
<textBox name="FromEmail" label="From Email" type="Email" />
<textBox name="FromName" label="From Name" type="100" />
<textBox name="BccEmail" label="BCC" type="EmailList" />
<textBox name="Subject" label="Subject" type="300" />
<textBox2 name="TextBody" label="Body" type="Memo" />
</unit>
</smartForm>
</meta>
<value><?xml version="1.0" encoding="utf-16"?><root><ForgotPassword BccEmail="test@test.com" FromEmail="test@test.com" FromName="password test" Subject="password test" TextBody="info" /><ForgotUsername BccEmail="test@test.com" FromEmail="test@test.com" FromName="test" Subject="test" TextBody="test" /></root></value>
</email>
Проблема № 1 - я попытался проанализировать xml, используя XElement.Parse("string")
, однако я не могу получить узел <value>
, пока не удалю объявление xml (т.е. первые 39 символов).Я надеюсь, что НЕ ДОЛЖЕН это делать, поскольку это хрупкое решение.
Проблема № 2 - После того, как у меня есть содержимое элемента <value>
и проанализировано в XElement, я хочу запросить либо <ForgotUsername>
или <ForgotPassword>
дочерний узел элемента документа <root>
.Когда я получил .Elements()
, мне сказали, что коллекция пуста.
Что я делаю не так?
XML значения после замены сущностей:
<root>
<ForgotPassword BccEmail="test@test.com" FromEmail="test@test.com" FromName="password test" Subject="password test" TextBody="info" />
<ForgotUsername BccEmail="test@test.com" FromEmail="test@test.com" FromName="test" Subject="test" TextBody="test" />
</root>
ОБНОВЛЕНИЯ: после попытки первоначального предложения Абатищева - яизменил код проблемы # 1 на следующий:
var xdoc = XDocument.Parse(contentXml);
return (from element in xdoc.Elements("value")
select element.Value).FirstOrDefault();
На основании предоставленной информации он должен вернуть строку в узле значения;однако, это возвращает нуль.Функция xdoc.Elements () (или как показано в приведенном выше фрагменте) возвращает ноль.