【问题标题】:Parse an XML value with a colon in SQL Server在 SQL Server 中用冒号解析 XML 值
【发布时间】:2018-09-11 18:37:04
【问题描述】:

我需要帮助来解析 SQL Server 中的 XML。我需要获取“d1p1:Val2”值和“d2p1:string”值的串联。

<FirstData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:d1p1="http://XXXXXX" xmlns="http://YYYYYY" i:type="d1p1:StaticInfo">
<Timestamp>0</Timestamp>
<ActionResult i:nil="true" />
<d1p1:Val1 xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:string>1</d2p1:string>
<d2p1:string>2</d2p1:string>
<d2p1:string>3</d2p1:string>
<d2p1:string>4</d2p1:string>
</d1p1:Val1>
<d1p1:Val2>false</d1p1:Val2>
</FirstData>

【问题讨论】:

标签: sql-server xml xquery xquery-sql


【解决方案1】:

您的问题不是很清楚,但这可能会对您有所帮助:

DECLARE @xml XML=
N'<FirstData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d1p1="http://XXXXXX" xmlns="http://YYYYYY" i:type="d1p1:StaticInfo">
  <Timestamp>0</Timestamp>
  <ActionResult i:nil="true" />
  <d1p1:Val1 xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:string>1</d2p1:string>
    <d2p1:string>2</d2p1:string>
    <d2p1:string>3</d2p1:string>
    <d2p1:string>4</d2p1:string>
  </d1p1:Val1>
  <d1p1:Val2>false</d1p1:Val2>
</FirstData>';

WITH XMLNAMESPACES(DEFAULT 'http://YYYYYY'
                          ,'http://XXXXXX' AS d1p1
                          ,'http://schemas.microsoft.com/2003/10/Serialization/Arrays' AS d2p1)
SELECT @xml.value(N'(/FirstData/d1p1:Val2/text())[1]','bit') AS D1P1_Val2
      ,@xml.query(N'data(/FirstData/d1p1:Val1/d2p1:string/text())').value(N'text()[1]',N'nvarchar(max)') AS AllStrings;

结果

D1P1_Val2   AllStrings
0           1 2 3 4

这是 - 不推荐 - 最小查询:

SELECT @xml.value(N'(//*:Val2)[1]','bit') AS D1P1_Val2
      ,@xml.query(N'data(//*:string)').value(N'.',N'nvarchar(max)') AS AllStrings;

【讨论】:

  • 连接时可以加分隔符吗?
【解决方案2】:

尝试这样的事情(自己无法测试):

SELECT Instructions.query('
     declare namespace d1p1="http://XXXXXX";
     declare namespace d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays";
        concat(//d1p1:Val2, " ", //d2p1:string[1]);
    ')

我想你只需要详细说明一下

【讨论】:

  • 一个错误:“XQuery [query()]: 在 XQuery 表达式的末尾不再需要标记。找到 ';'。”
  • 我从未说过这是一个完整的解决方案,只是一个开始
  • 正如错误消息所说,最后的“;”在查询中应该被删除。
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多