有没有更好的方法来读取 LINQ-to-XML 中的 XML 后代?

发布于 2024-10-13 05:12:34 字数 228 浏览 1 评论 0原文

我有这样的代码:

string result = xml.Root.Descendants("XYZ").Descendants("ABC").Descendants("MNO").Single().Value;

1)有没有更好的方法来读取值?某种通用的方式不依赖于我必须去的深度节点的数量?

2)消除对“XYZ”、“ABC”等的硬编码依赖的方法是什么?

I have code like this:

string result = xml.Root.Descendants("XYZ").Descendants("ABC").Descendants("MNO").Single().Value;

1) Is there a better way to read the value? Some way generic that is not dependent on the nuber of nodes deep that I have to go?

2) What would be the approach to remove the hard-coded dependency on "XYZ", "ABC" etc. ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

°如果伤别离去 2024-10-20 05:12:34

目前还不清楚你的真正意思,但这就是你想要的吗?

public IEnumerable<XElement> PathDescendants(
    this XElement element,
    params XName[] names)
{
    return new[] { element }.PathDescendants(names);
}

public IEnumerable<XElement> PathDescendants(
    this IEnumerable<XElement> elements,
    params XName[] names)
{
    return names.Aggregate(elements,
                           (current, name) => current.Descendants(name));
}

然后你可以调用:

string result = xml.Root.PathDescendants("XYZ", "ABC", "MNO").Single().Value;

It's unclear what you really mean, but is this what you're after?

public IEnumerable<XElement> PathDescendants(
    this XElement element,
    params XName[] names)
{
    return new[] { element }.PathDescendants(names);
}

public IEnumerable<XElement> PathDescendants(
    this IEnumerable<XElement> elements,
    params XName[] names)
{
    return names.Aggregate(elements,
                           (current, name) => current.Descendants(name));
}

Then you can call:

string result = xml.Root.PathDescendants("XYZ", "ABC", "MNO").Single().Value;
岁月无声 2024-10-20 05:12:34

如果您不关心父节点依赖性,则可以直接转到后代调用中的 "MNO"

xml.Root.Descendants("MNO")

但是,这会产生一系列 MNO 后代,无论它们出现在 XML 结构中的任何位置。

<root>
   <MNO />
   <ABC>
      <MNO />
   </ABC>
   <ABC>
      <XYZ>
         <MNO />
      </XYZ>
   </ABC>
</root>

所有 MNO 元素都将位于序列中。

If you don't care about the parent node dependency, you can just go straight to "MNO" in your descendants call.

xml.Root.Descendants("MNO")

However, that would produce a sequence of MNO descendants from wherever they might show up in your XML structure.

<root>
   <MNO />
   <ABC>
      <MNO />
   </ABC>
   <ABC>
      <XYZ>
         <MNO />
      </XYZ>
   </ABC>
</root>

All MNO elements would be in the sequence.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文