C# 创建一个查询,使用过滤器更快地将数据提取为XML
我正在使用SQL server 2014,试图以分层结构从SQL server获取xml, ` ` 我得到的输出是C# 创建一个查询,使用过滤器更快地将数据提取为XML,c#,sql,sql-server,xml,sql-server-2014,C#,Sql,Sql Server,Xml,Sql Server 2014,我正在使用SQL server 2014,试图以分层结构从SQL server获取xml, ` ` 我得到的输出是 <model ModelId="11" ParentIdFK="3" ModelName="Sedans" Expanded="0" SortOrder="1"> <model ModelId="14" ParentIdFK=&q
<model ModelId="11" ParentIdFK="3" ModelName="Sedans" Expanded="0" SortOrder="1">
<model ModelId="14" ParentIdFK="11" ModelName="328i Sedan" Expanded="0" SortOrder="1">
<model>
<model />
</model>
</model>
<model ModelId="15" ParentIdFK="11" ModelName="328xi Sedan" Expanded="0" SortOrder="2">
<model>
<model />
</model>
</model>
<model ModelId="16" ParentIdFK="11" ModelName="335i Sedan" Expanded="0" SortOrder="3">
<model>
<model />
</model>
</model>
<model ModelId="167" ParentIdFK="11" ModelName="Sheilas Model" Expanded="0" SortOrder="3">
<model>
<model />
</model>
</model>
<model ModelId="289" ParentIdFK="11" ModelName="335xi Sedan" Expanded="0" SortOrder="3">
<model>
<model />
</model>
</model>
</model>
<model ModelId="12" ParentIdFK="3" ModelName="Sports Wagon" Expanded="0" SortOrder="2">
<model ModelId="17" ParentIdFK="12" ModelName="328xi Sports Wagon" Expanded="0" SortOrder="1">
<model>
<model />
</model>
</model>
<model ModelId="18" ParentIdFK="12" ModelName="328i Sports Wagon" Expanded="0" SortOrder="2">
<model>
<model />
</model>
</model>
<model ModelId="214" ParentIdFK="12" ModelName="Convertible" Expanded="0" SortOrder="4">
<model ModelId="223" ParentIdFK="214" ModelName="328i Convertible" Expanded="0" SortOrder="1">
<model />
</model>
<model ModelId="224" ParentIdFK="214" ModelName="335i Convertible" Expanded="0" SortOrder="3">
<model />
</model>
</model>
</model>
这个查询也很简单,但是有很多没有属性的节点
所以我试着设置@data.modify'delete//model[empty@ModelId]'以删除这些节点
这需要将近30秒。有人能推荐一种更快更好的方法来更快地获取xmal吗使用xml linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication164
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement[] models = doc.Descendants("model").ToArray();
for (int i = models.Count() - 1; i >= 0; i--)
{
if (models[i].Attributes().Count() == 0)
{
models[i].Remove();
}
}
}
}
}
要删除这些节点需要将近30秒的时间,那么您是否在询问是否有一种更快的方法可以在不需要节点的情况下删除节点或获取xml?在我看来,你想要完成什么还不是很清楚。对于您正在做的事情,modify是正确的,这需要一个xmldml语句来插入、更新或删除XML数据中的节点,您认为可以加快速度吗?同样,IMHO,需要更改查询以排除不需要的节点。如果继续,则根本不需要modify方法,只需获取所需内容。提问时,需要提供一个最小的可重复示例。请参考以下链接:请提供以下内容:1 DDL和示例数据填充,即创建表和插入T-SQL语句。2您需要做什么,即逻辑和您的代码尝试实现它。3期望输出,基于上述1中的样本数据。4您的SQL Server版本选择@@version;有些人,有些地方对SQLXML查询非常了解,可以回答,但大多数人看到这样的查询,就会觉得太复杂、脆弱、难以支持。我的方法是只编写一个简单的SQL查询,获取所需的数据,并使用XSL/XMLLINQ或类似工具对其进行塑造。希望有帮助。这在sql中如何解决这个问题?这个解决方案如何更快和相关?发布的代码是c语言的,那么SQL和这个问题有什么关系呢?xml字符串正在c中处理。OP在sql中使用xml,因此对于xml auto,而不是c…您是说上面的OP查询不是sql查询?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication164
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement[] models = doc.Descendants("model").ToArray();
for (int i = models.Count() - 1; i >= 0; i--)
{
if (models[i].Attributes().Count() == 0)
{
models[i].Remove();
}
}
}
}
}