XML通过保存到文件而丢失双引号

时间:2016-02-09 12:55:46

标签: xml tsql powershell

我试图创建xml文件:

    DECLARE @XML as XML = ( Select 
                                 ProductID as "@Item", 
                                 Store as "@Store", 
                                 Price as "@Price",  
                                 Stock as "@Stock" 
                            From ItemsDB
                            FOR XML PATH ('product'), ROOT ('products')
                           );

    DECLARE @xmlChar AS VARCHAR(max) = CAST(@xml AS VARCHAR(max))

    SET @xmlChar = REPLACE(REPLACE(@xmlChar, '>', '^>'), '<', '^<')

    DECLARE @command VARCHAR(8000) = 'powershell -Command "Set-Content-Encoding UTF8 D:\XML\test.xml \"' + @xmlChar + '\""'


   EXEC xp_cmdshell @command

}

但是xml文件丢失了所有双引号,结果如下所示:

    <products>
      <product Item=100798 Store=121 Price=118.56 Stock=0.0000/>
      <product Item=101628 Store=401 Price=593.14 Stock=0.0000/>
    </products>

在哪里获取像这样的xml:

   <products>
      <product Item="100798" Store="121" Price="118.56" Stock="0.0000"/>
      <product Item="101628" Store="401" Price="593.14" Stock="0.0000"/>
    </products>

1 个答案:

答案 0 :(得分:1)

我用我的一些数据尝试了你的代码......这是“命令”回来了:

Mirror
  • 你正在使用糟糕的逃避(powershell等待反击)
  • 您必须逃避let mirror = Mirror(reflecting: ActionModel.self) print(mirror.displayStyle) // nil 而不是powershell -Command "Set-Content-Encoding UTF8 D:\XML\test.xml \"^<products^>^<product Item="84519" Store="xyz"/^>^<product Item="260" Store="abc"/^>^</products^>\""
  • 我不得不逃离空间
  • 您的powershell命令语法错误

这适用于我的系统:

<

结果

>

我没有找到用双引号写相同的方法,但这通常 - 不重要。 XML可以处理两者。如果您使用应用程序(此处为Visual Studio,Win10 / Edge和Chrome)打开此文件,您会看到这一点:

with Visual Studio

With Win10/Edge

or Chrome

每个应用程序都接受此作为有效的XML,并且不仅仅“按原样”显示内容,而是进行某种解释。这应该证明这是有效的......