我们是否可以在动态生成的 XML 响应上构建 LINQ 查询

本文关键字:响应 XML 构建 查询 LINQ 是否 动态 我们 | 更新日期: 2023-09-27 18:36:33

我对linq有一个查询,假设每次这个xml响应会改变时我都有一个xml响应(我从某个x服务器获得),但xml的根元素是相同的,但有时后代节点(比如里面有许多不同的节点)可能存在或不存在,所以我需要在这个xx上构建linq查询,这样就不会有异常抛出说某些x1元素或子节点不是存在。。所以最后它应该采用xml(来自服务器响应的内容)并构建查询。

问候拉吉。

我们是否可以在动态生成的 XML 响应上构建 LINQ 查询

我过去有过这个:xml每次都有完全不同的结构。

因此,我构建了一些东西,首先分析了结构并将该结构存储在数据库表中,以便能够了解增量并对其进行一些历史记录(和差异)。因为有时需要手动干预(无法预测一切)。

在分析阶段之后,可以根据结构分析对新结构进行查询。

所以我采取了两步走的方法,也许这也适用于你。

首先,您需要将 XML 转换为动态结构。我找到的第一个库(虽然没有尝试过):https://www.nuget.org/packages/netfx-System.Xml.DynamicXml/
然后,可以将 Linq 添加到动态 XML 根目录之上。
但是,从性能上讲,这确实是很糟糕的方法。我曾经玩过动态XML,速度非常慢。也许,与其让它动态化,不如创建 XElement 的扩展方法(如果你将 XML 加载到 XDocument),它将返回空节点而不会引发异常,例如(伪代码):

public static class XElementExtensions
{
  public static XElement SafeGetChild(this XElement node, string childName)
  {
    XElement result;
    if (!node.TryGetChildByName(childName, out result))
      result = node.Document.CreateElement(childName);
    return result;
  }
}