Joe*_*Joe 3 xml sql-server sql-server-2014
使用 Forrest 的这个解决方案:
DECLARE @XML xml =
'<?xml version="1.0" encoding="UTF-8"?>
<Orders>
<Order>
<OrderID>334</OrderID>
<AmountPaid currencyID="EUR">17.10</AmountPaid>
<UserID>marc58</UserID>
<ShippingAddress>
<Name>Marc Juppé</Name>
<Address>Rue garçonneé III° arrondissement</Address>
<City>Paris</City>
<StateOrProvince></StateOrProvince>
<Country>FR</Country>
<Phone>333333333</Phone>
<PostalCode>22222</PostalCode>
</ShippingAddress>
<ShippingCosts>4.50</ShippingCosts>
<Items>
<Item>
<Details>
<ItemID>3664</ItemID>
<Store>47</Store>
<Title>MCPU DDA010</Title>
<SKU>mmx</SKU>
</Details>
<Quantity>1</Quantity>
<Price currencyID="EUR">6.2</Price>
</Item>
<Item>
<Details>
<ItemID>3665</ItemID>
<Store>45</Store>
<Title>MCPU DFZ42</Title>
<SKU>mmy</SKU>
</Details>
<Quantity>2</Quantity>
<Price currencyID="EUR">3.2</Price>
</Item>
</Items>
</Order>
</Orders>'
SELECT
x.value('./ItemID[1]','int') AS ItemID,
x.value('./Store[1]','int') AS Store,
x.value('./Title[1]','nvarchar(100)') AS Title,
x.value('./SKU[1]','nvarchar(100)') AS SKU,
x.value('../Quantity[1]','int') AS Qty,
x.value('../Price[1]','decimal(11,2)') AS Price,
x.query('//OrderID[1]').value('.','int') AS OrderID,
x.query('//AmountPaid[1]').value('.','decimal(11,2)') AS AmountPaid,
x.query('//UserID[1]').value('.','nvarchar(100)') AS UserID,
x.query('//ShippingCosts[1]').value('.','decimal(11,2)') AS ShippingCosts
FROM @XML.nodes('//Item/Details') i(x)
Run Code Online (Sandbox Code Playgroud)
我收到类似的错误
XML 解析:第 162 行,第 34 个字符,非法 xml 字符
当需要解析包含重音字符 (àèòìùé) 或 ° 的字段时
我尝试转换éintè但收到此错误:
XML 解析:第 162 行,字符 41,格式良好的检查:未声明的实体
而如果我转换为è它的工作原理。
问题是我无法对 XML 文件进行 HTMLEncode,因为我希望它也能转换 XML 结构的所有“<”和“>”,可能还有其他东西。
在解析之前可以建议对 XML 进行 HTMLEncode 的最佳解决方案吗?
您拥有的 XML 在 UTF-8 编码中无效。需要对重音字符进行编码。例如°应该编码为°.
这是一个较短的版本,也失败了。
declare @X xml = '<?xml version="1.0" encoding="UTF-8"?>°';
select @X.value('text()[1]', 'nchar(1)');
Run Code Online (Sandbox Code Playgroud)
消息 9420,级别 16,状态 1,第 1 行 XML 解析:第 1 行,字符 39,非法 xml 字符
如果您使用 UTF-8,则应该是这样的。
declare @X xml = '<?xml version="1.0" encoding="UTF-8"?>°';
select @X.value('text()[1]', 'nchar(1)');
Run Code Online (Sandbox Code Playgroud)
您需要向后追溯数据源到生产者,以查看最终的无效 XML 的位置。
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |