将数据从数据库导出到XML时遇到一些问题。我可能已经过头了,因为我没有早期的XML知识,但是嘿,它有多难:)
我们已经通过Excel工作表发送此数据,但现在客户希望将其作为XML。上传到他们的系统后,我可以将其作为XML下载,下面是该文件的一部分,
<?xml version="1.0" encoding="ISO-8859-1"?>
<PricatHead xmlns="xxxxx"
preOrderTo="2015-06-01T23:59:59"
name="15005-3"
merchant="xxxx"
customer="xxxxx"
validFrom="2014-08-01T00:00:00"
validTo="2015-06-01T23:59:59"
currency="SEK"
contractDiscount="0">
<sprProduct itemID="86035-8"
name="xxxx"
description="xxxxxx"
tax="0.00"
eanCode=""
eanType="EAN 13"
color="BLACK"
colorCode="C0100"
size="36"
sizeRange="EURO size"
modelNo="86035"
inSelection="N"
productDiscount="0">
<priceBracket quantity="1"
price="x"
grossPrice="xxxx"
validOrderDateFrom="2014-08-01T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type="PRE"/>
<priceBracket quantity="1"
price="x"
grossPrice="x"
validOrderDateFrom="2015-02-15T00:00:00"
validOrderDateTo="2015-06-01T00:00:00"
validShipDateFrom="2015-02-15T00:00:00"
validShipDateTo="2015-06-01T00:00:00"
type=""/>
<variantValue name="unit"
value="pcs"/>
<variantValue name="recPrice_SEK"
value="x"/>
<variantValue name="recCampaignPrice_SEK"
value="0"/>
<variantValue name="brand"
value="x"/>
<variantValue name="goodsClass"
value="4052"/>
<variantValue name="recCampaignPriceCurrency"
value="SEK"/>
<variantValue name="recWebPriceCurrency"
value="SEK"/>
<variantValue name="unitType"
value="pcs"/>
<variantValue name="x"
value="2603"/>
<variantValue name="marketingInfo"
value="xxxxx"/>
<variantValue name="preOrderDiscountHQ"
value="0"/>
<variantValue name="grossPriceCurrency"
value="SEK"/>
<variantValue name="productPicture_1"
value="xxx"/>
<variantValue name="suppOrderCurrency"
value="SEK"/>
<variantValue name="preOrderCurrency"
value="SEK"/>
<variantValue name="productPicture_3"
value="xxx"/>
<variantValue name="productPicture_2"
value="xxxx"/>
<variantValue name="invoiceMethod"
value="net"/>
<variantValue name="logisticUnit"
value="cu"/>
<variantValue name="countryOfOrigin"
value="CN"/>
<variantValue name="suppOrderDiscountHQ"
value="0"/>
<variantValue name="customsTariffNo_SE"
value="6402999300"/>
</sprProduct>
对于excel表,我有一个SQL序列,它产生一个包含所有上述数据的大表,其中<sprProduct>
是一行,其余列。
我没有问题来创建<pricatHead>
和<sprProduct>
标记,但我失败了<priceBracket>
,因为它们也是select语句中的列,我有多个列需要自己的<priceBracket>
1}}。
<variantValue>
会导致同样的问题。
很难解释,但一个sql行应生成多个<priceBracket>
和<variantValue>
。
到目前为止,我的代码如下(缩短),
--Pricat HEAD
select
PrisLista as [@name]
,gtinMerchant as [@merchant]
,gtinCustomer as [@customer]
--Pricat ROWS
,( select
ar.ArtNr as [@itemID]
,ar.ArtBeskr as [@name]
,ar.ArtBeskrLong as [@description]
,prl.vat as [@tax]
,prl.quantity as [sprProduct/priceBracket/@quantity]
.........
from prl
for xml path ('sprProduct'), type)
from prh
FOR XML PATH ('PricatHead')
如何让特定行的每列生成带有属性值的标记?
作为第二个问题,我还从客户那里获得了这个XML文件的XSD架构。这可以用来帮助格式化从我的数据库导出的数据以匹配他们所需的XML文件吗?
答案 0 :(得分:0)
如果要在sprProduct中嵌套priceBracket,则将选定的XML列别名为[sprProduct/priceBracket]
。要创建嵌套节点的属性,请使用@前缀,例如[sprProduct/priceBracket/@quanity]
。
这是一个示例脚本,展示了如何创建您提到的不同安排。
select
-- row level attributes
1 as [@a],
2 as [@b],
3 as [@c],
-- node level attributes
4 as [sprProduct/@a],
5 as [sprProduct/@b],
6 as [sprProduct/@c],
-- nested section
(select
'a1' as [@a],
'a2' as [@b],
'a3' as [@c]
for xml path ('priceBracket'), type),
-- repeated nested section
(select
'b1' as [@a],
'b2' as [@b],
'b3' as [@c]
for xml path ('priceBracket'), type)
for xml path ('PricatHead'), type
实际上,子选择会将源表连接到主键上,以便能够访问与外部选择相同的行中的列。