【问题标题】:Need to Revise version of SQL Server generated XML需要修改 SQL Server 生成的 XML 的版本
【发布时间】:2018-04-23 17:57:25
【问题描述】:

以下代码行为我生成了一个类似于以下集合的 XML 文件,这对我的客户来说几乎是可以接受的。我说几乎是因为我需要有一个更改 <?xml version="1.0" encoding="UTF-8"?> 与标准 <?xml version="1.0"> 相比,它位于我使用下面的 EXEC xp_cmdshell 命令生成的每个 XML 文件的顶部。我基本上需要<?xml version="1.0" encoding="UTF-8"?> 而不是<?xml version="1.0">。有人可以告诉我这是如何实现的吗?

-- SQL CODE USED TO GENERATE XML FILE - Using XML Path
    SET @FileString = @FileName + '.xml" -S ALSCG-JPATHIL\SQLEXPRESS -T -c -t,'
    SET @SQLSTRING = 'bcp ";WITH XMLNAMESPACES (DEFAULT ''urn:CP-xml'') select A.TargetSystem AS ''Header/Target'' from [Header] A FOR XML PATH(''Qty'')" queryout "C:\Program Files\'
    SET @SQLSTRING = @SQLSTRING + @FileString
    EXEC xp_cmdshell @SQLSTRING



 -- XML FILE CONTENTS GENERATED  - Missing the Encoding Condition here
    <?xml version="1.0">
    <Qty xmlns="urn:CP-xml">
    <Header>
    <Target></Target>
    </Header>
    </Qty>




 -- XML FILE CONTENTS DESIRED - Note only difference is the Encoding!
    <?xml version="1.0" encoding="UTF-8"?>
    <Qty xmlns="urn:CP-xml">
    <Header>
    <Target></Target>
    </Header>
    </Qty>

【问题讨论】:

    标签: sql sql-server tags for-xml-path


    【解决方案1】:

    this link 的最后一个回复是我能找到的唯一“解决方案”

    您好,(回复较晚,但将来可能会对某人有所帮助)VARBINARY 没有 为我工作,可能是因为我的数据源不符合要求。继承人 在 SQL 端对我有用的是什么;

    1) 将原始 xml 数据存储为 VARCHAR 或 TEXT(而不是 NVARCHAR 或 NTEXT) 转换成一个变量,

    2) 使用 utf-8 编码将此变量读入 xml 数据类型。 比如:

    DECLARE @TempHTMLText
    
    SET @TempHTMLText = --your raw xml data DECLARE @XMLDataText XML
    
    SELECT @XMLDataType = '<?xml version="1.0" encoding="utf-8" ?>' + @TempHTMLText
    

    我认为您不需要完全这样做,而是使用以下查询:

    DECLARE @Xml XML;
    
    WITH XMLNAMESPACES(DEFAULT 'urn:CP-xml') 
    SELECT @Xml = (select A.TargetSystem AS 'Header/Target' from [Header] A FOR XML PATH('Qty'));
    
    SELECT CONCAT('<?xml version="1.0" encoding="utf-8" ?>', CAST(@Xml AS VARCHAR(MAX)))
    

    请注意,在我的测试中,我无法在保留编码标记的同时将此数据转换回 XML。这似乎是由 XML 数据类型明确强制执行的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多