【问题标题】:sql server FOR XML xpath mode: how to generate nested XML id 1 and 2sql server FOR XML xpath模式:如何生成嵌套的XML id 1和2
【发布时间】:2019-01-02 18:07:45
【问题描述】:

我是一个 xml 字符串,如下所示。我想使用 sql server for xml xpath 来生成这个 xml 字符串。我很难获得 id="IP1" 和 id="IP2"。你能帮我吗?非常感谢。

    <root>
    <InsuredOrPrincipal id="IP1">
    <GeneralPartyInfo>
    <NameInfo>
    <PersonName>
    <Surname>A </Surname>
    <GivenName>B</GivenName>
    </PersonName>

    </NameInfo>

    </GeneralPartyInfo>

    </InsuredOrPrincipal>


    <InsuredOrPrincipal id="IP2">
    <GeneralPartyInfo>
    <NameInfo>
    <PersonName>
    <Surname>A </Surname>
    <GivenName>B</GivenName>
    </PersonName>

    </NameInfo>

    </GeneralPartyInfo>

    </InsuredOrPrincipal>
    </root>

【问题讨论】:

  • 您需要提供一些详细信息。类似于您会在此处找到的内容。 spaghettidba.com/2015/04/24/…
  • 如何生成两个 InsuredOrPrincipal。这些示例仅显示如何生成一个。我不知道如何做两个 id="IP1" 和 id="IP2"。我需要一个榜样。
  • 什么例子?请记住,我们看不到您的屏幕,也不知道您要做什么。我完全不明白你想在这里完成什么。

标签: sql-server xml xpath for-xml-path for-xml


【解决方案1】:

这应该可以满足您的需要。您可以在 SSMS 中运行代码以查看它的实际效果。

-- create table variable
DECLARE @table TABLE ( id VARCHAR(10), Surname VARCHAR(50), GivenName VARCHAR(50) );

-- insert test data
INSERT INTO @table ( 
    id, Surname, GivenName 
)
VALUES
( 'IP1', 'A1', 'B1' )
, ( 'IP2', 'A2', 'B2' );

-- return xml results from test data as per required schema
SELECT
    id AS 'InsuredAsPrincipal/@id'
    , Surname AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/Surname'
    , GivenName AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/GivenName'
FROM @table
FOR XML PATH ( '' ), ROOT( 'root' );

返回的结果 XML 是:

<root>
  <InsuredAsPrincipal id="IP1">
    <GeneralPartyInfo>
      <NameInfo>
        <PersonName>
          <Surname>A1</Surname>
          <GivenName>B1</GivenName>
        </PersonName>
      </NameInfo>
    </GeneralPartyInfo>
  </InsuredAsPrincipal>
  <InsuredAsPrincipal id="IP2">
    <GeneralPartyInfo>
      <NameInfo>
        <PersonName>
          <Surname>A2</Surname>
          <GivenName>B2</GivenName>
        </PersonName>
      </NameInfo>
    </GeneralPartyInfo>
  </InsuredAsPrincipal>
</root>

我相信这就是您想要做的。这里真正的“魔力”在于为列数据设置别名。

【讨论】:

  • 非常感谢您的帮助。
  • 有没有办法使用 [] 来解决问题。它会让这更容易。我试过它显示我无效的 xml 路径。 root/InsuredAsPrincipal [id='IP1' ]
  • 解决什么问题,迈克?我不确定你在做什么。
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多