如何使用xml explicit生成带元素和属性的xml; root用xmlns

时间:2017-11-06 08:24:02

标签: sql-server xml

我需要像这样的xml:

`<root xmlns="http://www.sample.com"
 <lkz>12345</lkz>
   <styles>
     <style>
     </style>
     <style>
     </style>
  </styles>
</root>`

我发现了这个:

how-to-generate-xml-with-element-and-attribute-using-xml-explicit

完美的我的xml问题,但我需要

<root> = <root xmlns="http://www.sample.com"

我必须要xml显式!!!! (因为cdata)

感谢

1 个答案:

答案 0 :(得分:1)

您是否意识到/etc/nginx/conf.d已过时的事实?你可以read this (plus the links at the end)

你可以像这样解决这个问题:

CDATA

- 此查询会创建您要求的内容(至少我希望如此)

DECLARE @dummy TABLE(style VARCHAR(100));
INSERT INTO @dummy VALUES
 ('Some red style')
,('Another blue style');

结果

SELECT 1 AS Tag
      ,NULL AS Parent
      ,'http://www.sample.com' AS [root!1!xmlns] 
      ,12345 AS [root!1!lkz!element]
      ,NULL AS [styles!2]
      ,NULL AS [style!3!!cdata]

UNION 
SELECT 2
      ,1
      ,NULL
      ,NULL
      ,NULL
      ,NULL
FROM @dummy

UNION 
SELECT 3
      ,2
      ,NULL
      ,NULL
      ,NULL
      ,style
FROM @dummy

FOR XML EXPLICIT    

- 这是你应该解决这个问题的方法

<root xmlns="http://www.sample.com">
  <lkz>12345</lkz>
  <styles>
    <style><![CDATA[Another blue style]]></style>
    <style><![CDATA[Some red style]]></style>
  </styles>
</root>

结果

WITH XMLNAMESPACES(DEFAULT 'http://www.sample.com')
SELECT 12345 AS lkz
      ,(
        SELECT style
        FROM @dummy 
        FOR XML PATH(''),ROOT('styles'),TYPE
       )
FOR XML PATH('root');

这里唯一的问题是:由于子选择而重复的命名空间。这没有错,但很烦人。一个众所周知的问题多年(Please vote for the related connect article)。