gpt4 book ai didi

c# - XDocument 通过其名称属性的值获取 XML 元素

转载 作者:IT王子 更新时间:2023-10-29 04:47:29 26 4
gpt4 key购买 nike

我有一个像这样的 XML 结果

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">16</int>
</lst>
<result name="response" numFound="3" start="0" maxScore="1.0">
<doc>
<str name="ContaFirstname">
firstname1
</str>
<str name="ContaId">6557</str>
<str name="ContaJobTitle">Manager</str>
<str name="ContaSurname">surname1
</str>
</doc>
<doc>
<str name="ContaFirstname">firstname2</str>
<str name="ContaId">6203</str>
<str name="ContaJobTitle">Director</str>
<str name="ContaSurname">surname2</str>
</doc>
</result>
</response>

我想获取对象列表,每个对象都将包含 ContaFirstnameContaIdContaJobTitle 的值Conta姓氏

我试过这样的东西,但那是不对的,因为我把它们都设为 NULL

var test = from c in xml.Descendants("doc")
select new
{
firstname = c.Element("ContaFirstname"),
surnmane = c.Element("ContaSurname")
};

那么如何通过名称访问这些元素呢?

最佳答案

您不想通过名称 访问元素,因为大多数人会解释该语句。您希望通过元素的 name 属性的值访问元素:

firstname = (string) c.Elements("str")
.First(x => x.Attribute("name").Value == "ContaFirstname");
//etc

您可能希望将其抽象为一个单独的方法,因为多次这样做会很痛苦。例如:

public static XElement ElementByNameAttribute(this XContainer container,
string name)
{
return container.Elements("str")
.First(x => x.Attribute("name").Value == name);
}

然后:

var test = from c in xml.Descendants("doc")
select new
{
firstname = c.ElementByNameAttribute("ContaFirstname").Value,
surnmane = c.ElementByNameAttribute("ContaSurname").Value
};

如果您有任何机会为您的文档提供更合理的结构,那将是更可取的...

关于c# - XDocument 通过其名称属性的值获取 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504057/

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