簡體   English   中英

SQL XML命名空間

[英]SQL XML Namespaces

我一直在使用sql查詢來生成xml輸出。 我已將WITH XMLNAMESPACES(DEFAULT 'http://schemas.nav.gov.hu/2013/szamla', 'http://www.w3.org/2001/XMLSchema' as xs)設置WITH XMLNAMESPACES(DEFAULT 'http://schemas.nav.gov.hu/2013/szamla', 'http://www.w3.org/2001/XMLSchema' as xs)設置命名空間。

WITH XMLNAMESPACES(DEFAULT 'http://schemas.nav.gov.hu/2013/szamla', 'http://www.w3.org/2001/XMLSchema' as xs)  
SELECT CAST(getdate() as date) AS export_datuma
  ,@noOfResults AS export_szla_db
  ,@fromDate AS kezdo_ido
  ,@toDate AS zaro_ido
  ,@minInvoiceNo AS kezdo_szla_szam
  ,@maxInvoiceNo AS zaro_szla_szam
  ,@transactionXml AS [*]
FOR XML PATH('szamlak');

到目前為止,它仍然可以正常工作,但是在上面的查詢中,變量@transactionXml已經是xml數據類型。 因此,上述查詢的輸出如下所示:

<szamlak xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.nav.gov.hu/2013/szamla">
  <export_datuma>2018-01-12</export_datuma>
  <export_szla_db>21</export_szla_db>
  <kezdo_ido>2018-01-01</kezdo_ido>
  <zaro_ido>2018-01-12</zaro_ido>
  <kezdo_szla_szam>40003753</kezdo_szla_szam>
  <zaro_szla_szam>70000219</zaro_szla_szam>
  <szamla xmlns="">
    <fejlec>
      <szlasorszam>40003753</szlasorszam>
      <szlatipus>Rechnung</szlatipus>
      <szladatum>2018-01-02</szladatum>
      <teljdatum>2017-12-21</teljdatum>
    </fejlec>
    ...

現在我的問題是,如何避免每個szamla條目都獲得屬性xmlns=""

<szamla xmlns="">

它看起來應該像這樣:

<szamla>

在此先感謝您的幫助。

通過將完整的xml字符串轉換為nvarchar(max) ,然后用名稱空間替換了<szamlak>標記,我以不推薦的方式解決了該問題。 在輸出中,將xml文本強制轉換回xml數據類型。 我沒有找到更好的解決方案。

DECLARE @xml nvarchar(max)
SET @xml = (
        CAST(
            (SELECT 
                CAST(getdate() as date) AS export_datuma
                ,@noOfResults AS export_szla_db
                ,@fromDate AS kezdo_ido
                ,@toDate AS zaro_ido
                ,@minInvoiceNo AS kezdo_szla_szam
                ,@maxInvoiceNo AS zaro_szla_szam
                ,@transactionXml AS [*]
            FOR XML PATH('szamlak')
            ) as nvarchar(max))
        )
SET @xml = REPLACE(@xml,'<szamlak>', '<szamlak xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.nav.gov.hu/2013/szamla">')
SELECT cast(@xml as xml) 

一種方法是簡單地將其加載到xml變量中,然后從中刪除該不需要的屬性

例如:

declare @noOfResults int = 12;
declare @fromDate date = '2018-01-01';
declare @toDate date = '2018-01-12';
declare @minInvoiceNo int = 40003753;
declare @maxInvoiceNo int = 70000219;
declare @transactionXml xml = '<szamla>
    <fejlec>
      <szlasorszam>40003753</szlasorszam>
      <szlatipus>Rechnung</szlatipus>
      <szladatum>2018-01-02</szladatum>
      <teljdatum>2017-12-21</teljdatum>
    </fejlec>
</szamla>';

declare @xml xml;

WITH XMLNAMESPACES (DEFAULT 'http://schemas.nav.gov.hu/2013/szamlas', 'http://www.w3.org/2001/XMLSchema' as xs)
select @xml = (
    SELECT
    CAST(getdate() as date) AS export_datuma
    ,@noOfResults AS export_szla_db
    ,@fromDate AS kezdo_ido
    ,@toDate AS zaro_ido
    ,@minInvoiceNo AS kezdo_szla_szam
    ,@maxInvoiceNo AS zaro_szla_szam
    ,@transactionXml [*]
    FOR XML PATH('szamlak')
);

set @xml = cast(replace(cast(@xml as nvarchar(max)),'xmlns=""','') as xml);

select @xml;

返回值:

<szamlak xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.nav.gov.hu/2013/szamlas">
  <export_datuma>2018-01-12</export_datuma>
  <export_szla_db>12</export_szla_db>
  <kezdo_ido>2018-01-01</kezdo_ido>
  <zaro_ido>2018-01-12</zaro_ido>
  <kezdo_szla_szam>40003753</kezdo_szla_szam>
  <zaro_szla_szam>70000219</zaro_szla_szam>
  <szamla>
    <fejlec>
      <szlasorszam>40003753</szlasorszam>
      <szlatipus>Rechnung</szlatipus>
      <szladatum>2018-01-02</szladatum>
      <teljdatum>2017-12-21</teljdatum>
    </fejlec>
  </szamla>
</szamlak>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM