gpt4 book ai didi

c# - 如何访问子 xml 元素?

转载 作者:行者123 更新时间:2023-11-30 22:39:22 26 4
gpt4 key购买 nike

我在试图解析的遗留数据库中保存了一个 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>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;root&gt;&lt;ForgotPassword BccEmail="test@test.com" FromEmail="test@test.com" FromName="password test" Subject="password test" TextBody="info" /&gt;&lt;ForgotUsername BccEmail="test@test.com" FromEmail="test@test.com" FromName="test" Subject="test" TextBody="test" /&gt;&lt;/root&gt;</value>
</email>

问题 #1 - 我尝试使用 XElement.Parse("string") 解析 xml但是,我无法获得 <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>

更新:在尝试了 abatishchev 的初步建议后 - 我将问题 #1 的代码更改为以下内容:

var xdoc = XDocument.Parse(contentXml);
return (from element in xdoc.Elements("value")
select element.Value).FirstOrDefault();

根据提供的信息,它应该返回值节点中的字符串;但是,它返回 null。 xdoc.Elements()(或如上面的代码片段所示)返回 null。

最佳答案

  • 使用XDocument.Parse()创建支持XML声明的文档
  • 要获取单位,请使用

    XDocument.Parse("...").Root // or Element("email")
    .Elements("meta")
    .Elements("smartForm")
    .Elements("unit");
  • 或使用 XPath: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;

关于c# - 如何访问子 xml 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com