从SQL Server的SQL查询生成xml文件时无法获得所需的输出

时间:2009-10-28 19:08:11

标签: sql sql-server xml for-xml

我正在执行此查询

select category "ROOT/category",
question "Category/question",
option1 "Category/option1"
from testDB2 for XML PATH ('ROOT') , ELEMENTS

目前,数据库有三个条目,我得到的xml文件是

<ROOT>
  <ROOT>
    <category>maths</category>
  </ROOT>
  <Category>
    <question>2+2?</question>
    <option1>1</option1>
  </Category>
</ROOT>
<ROOT>
  <ROOT>
    <category>maths</category>
  </ROOT>
  <Category>
    <question>100*0</question>
    <option1>0</option1>
  </Category>
</ROOT>
<ROOT>
  <ROOT>
    <category>chemistry</category>
  </ROOT>
  <Category>
    <question>H2O?</question>
    <option1>water </option1>
  </Category>
</ROOT>

我不想要这个,我想要一个只有一个主要父节点的文件,其余的作为它的子节点,每个子节点可以是其他子节点的父节点,但是应该只有一个主节点父节点case每行是一个单独的父级,没有主要或单个父级

我希望我能够正确地说出我的问题。谢谢

3 个答案:

答案 0 :(得分:2)

尝试这样的事情:

select category, question, option1 from testdb2 for xml raw('Category'), elements, root('Categories')

for xml raw:这将为表中的每一行创建一个节点,每列都是该节点的一个属性 for xml raw('user'):这与xml raw相同,但是您指定节点的名称 对于xml raw('user')元素:从属性视图切换到节点视图。每列都是行节点中的节点 root('Users'):您可以使用它来命名您的父根

希望这会有所帮助

答案 1 :(得分:0)

我认为你想使用FOR XML AUTO mode来塑造你的输出。

答案 2 :(得分:0)

不是100%确定你真正想要的是什么,但是如何:

SELECT 
   category '@Name',
   question "Category/question",
   option1 "Category/option1"
FROM
   dbo.testDB2 
FOR XML PATH('Category'), ROOT('ROOT')

这是否更接近你想要的?如果我没有弄错(现在不能测试),这应该会给你类似的东西:

  <ROOT>
    <Category Name="maths">
      <question>100*0</question>
      <option1>0</option1>
    </Category>
    <Category Name="chemistry">
      <question>H2O?</question>
      <option1>water </option1>
    </Category>
  </ROOT>

如果没有 - 您是否可以发布一些示例行数据,以及您期望从SELECT中获得的数据?

马克