C# 如何访问子xml元素?
我有一个xml字符串保存在我试图解析的旧数据库中。我可以获取字符串,但在获取所需的值时有两个问题。首先是一些示例xmlC# 如何访问子xml元素?,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我有一个xml字符串保存在我试图解析的旧数据库中。我可以获取字符串,但在获取所需的值时有两个问题。首先是一些示例xml <?xml version="1.0" encoding="utf-16"?> <email> <meta> <smartForm> <unit name="ForgotUsername" label="Forgot Username Email">
<?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>
更新:
在尝试abatishchev的初始建议后,我将问题1的代码更改为:
var xdoc = XDocument.Parse(contentXml);
return (from element in xdoc.Elements("value")
select element.Value).FirstOrDefault();
根据提供的信息,它应该返回值节点中的字符串;但是,它返回null。xdoc.Elements()
XDocument.Parse()
创建支持XML声明的文档XDocument.Parse("...").Root // or Element("email")
.Elements("meta")
.Elements("smartForm")
.Elements("unit");
email/meta/smartForm/unit
var doc = XDocument.Parse("...");
var q = from meta in doc.Root.Elements("meta")
from smartForm in meta.Elements("smartForm")
from unit in smartForm.Elements("unit")
select unit;
- 以下几点对我很有用:
var xd = XDocument.Load("Test.xml");
var xv = XDocument.Parse((string)xd.Root.Element("value"));
Console.WriteLine(xv.Root.Elements().Count());
对于ForgotPassword和ForgotUsername,输出为2。对于#1:
你试过
XDocument.Parse()
而不是XElement.Parse()
?试过这两种方法,结果都是一样的。在切换到XDocument.Parse()并调用xdoc.Elements(“meta”)后,它说Elements()返回null。在主要问题中添加了一段。@James:简单地说,在前面加上XDocument.Root
。忘了根。我知道这很简单。谢谢
var xd = XDocument.Load("Test.xml");
var xv = XDocument.Parse((string)xd.Root.Element("value"));
Console.WriteLine(xv.Root.Elements().Count());
XElement doc = XElement.Load(file);
XElement valueElement = doc.Element("value");
string value = (string)valueElement;