我有一个xml字符串保存在我试图解析的遗留数据库中。我可以得到字符串,但有2个问题获取我需要的值。首先,一些示例xml。如何访问子元素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="[email protected]" FromEmail="[email protected]" FromName="password test" Subject="password test" TextBody="info" /><ForgotUsername BccEmail="[email protected]" FromEmail="[email protected]" FromName="test" Subject="test" TextBody="test" /></root></value>
</email>
问题#1 - 我试图使用XElement.Parse("string")
然而解析XML,我不能得到<value>
节点除非删除了XML声明(即前39个字符)。我希望不必这样做,因为这是一个脆弱的解决方案。
问题#2 - 一旦我有<value>
元素的内容,并解析成一个的XElement,我希望查询要么<root>
文档元素的<ForgotUsername>
或<ForgotPassword>
子节点。当我得到.Elements()
时,我被告知集合为空。
我在做什么错?
价值的XML实体替换后:
<root>
<ForgotPassword BccEmail="[email protected]" FromEmail="[email protected]" FromName="password test" Subject="password test" TextBody="info" />
<ForgotUsername BccEmail="[email protected]" FromEmail="[email protected]" FromName="test" Subject="test" TextBody="test" />
</root>
更新: 试图abatishchev的初步建议后 - 我改变了问题#1的代码如下:
var xdoc = XDocument.Parse(contentXml);
return (from element in xdoc.Elements("value")
select element.Value).FirstOrDefault();
根据提供的信息,它应该返回值节点中的字符串;但是,它返回null。 xdoc.Elements()(或者如上面的代码片段所示)返回null。
您是否尝试过的'XDocument.Parse()''而不是XElement.Parse()'? – dahlbyk 2011-04-25 21:27:20
对两者都尝试了同样的结果。 – JamesEggers 2011-04-25 21:27:57