【问题标题】:Insert piped SQL data into XML将管道 SQL 数据插入 XML
【发布时间】:2013-11-12 20:53:25
【问题描述】:

我需要将 SQL Server 查询的结果推送到一个 XML 文档中,我目前存储在标记为 xmlpush 的字符串中。

SQL 数据是用竖线分隔但没有 xml 标记的原始文本数据。如有必要,我可以将其从 SQL 中带入一个没有管道的 DataSet。

将它插入 XML 字符串的最佳方法是什么?

XML 类似于下面的内容。我需要将标题加载到一个名为 Header 的单独标记中,然后将每一行加载到一个名为 row 的标记中。

<?xml version='1.0' encoding='UTF-8'?>
<call method="load">
<credentials login="sampleuser"/>
<importDataOptions jobsize="false"/>
<version name="12" isDefault="false" />
<rowData>
<header>1st row from the data set</header>
<rows>
<row>2nd row from dataset here</row>
<row>3rd row from the dataset here</row>
</rows>
</rowData>
</call>

我对 XSLT 一无所知,对 XPATH 知之甚少。

我目前的想法是设置一个循环来读取每一行并在推送到堆栈之前用标签包装它,然后将 xml 与类似的东西连接起来

begin + stack + end

我很感激这方面的任何指示?我正在使用 C#。数据集可以有大约 300-700 行。

提前致谢。

【问题讨论】:

  • 你探索过DataSet.WriteXML方法吗?如果您控制两端(XML 的生产者和消费者)并且对格式没有严格的要求,这是最简单的方法。
  • 我会看看这个。谢谢指点。

标签: c# sql sql-server xml insert


【解决方案1】:

基本上,您似乎只是在构建一个 XML 字符串,采用上面指定的格式,并使用查询结果行中的内容填充某些标签。

伪代码:

var myXML = @"<?xml version='1.0' encoding='UTF-8'?>
<call method="load">
<credentials login="sampleuser"/>
<importDataOptions jobsize="false"/>
<version name="12" isDefault="false" />
<rowData>";

var firstRow = true;

while(dataset.hasrows){
    if(firstRow)
    {
        firstRow = false;
        myXML+= "<header>" + 1st row from the data set + "</header><rows>";
    }
    else
    {
        myXML+= "<row>"+ Nth row from dataset here+"</row>";
    }
}

myXML += @"</rows>
</rowData>
</call>";

你有多少行并不重要,你的 XML 字符串只会更长。之后,您可以从该字符串创建一个 XML 文件。最后,关于 XSLT,据我所知,它以 XML 作为输入,因此构建 XML 时不需要它。

【讨论】:

    【解决方案2】:

    SqlServer 有一个 FOR XML 选项,听起来它可以为所欲为:

    http://technet.microsoft.com/en-us/library/ms178107.aspx

    【讨论】:

    • 这看起来很有趣。我目前正在将我的字段转换为 varchars 并附加 |所以 FOR XML 可能是获取初始行集的方法。
    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多