我们可以通过动态生成的xml响应构建linq查询吗?

时间:2016-02-28 17:46:16

标签: c# xml linq xml-parsing linq-to-xml

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

此致 拉吉。

2 个答案:

答案 0 :(得分:1)

我过去曾经这样做过:xml每次进入时都会有不同的结构。

所以我构建了一些首先分析结构并将这个结构存储在数据库表中的东西,以便能够知道delta并且在其上有一些历史(和差异)。因为有时需要人工干预(不能预测一切)。

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

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

答案 1 :(得分:0)

首先,您需要将XML转换为动态结构。我找到的第一个图书馆(虽然没试过):https://www.nuget.org/packages/netfx-System.Xml.DynamicXml/
然后,您可以在动态XML根目录之上添加Linq 然而,在性能方面,这是非常糟糕的方法。我用动态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;
  }
}