[英]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.