繁体   English   中英

选择XML仅在几个具有相同名称的节点上多个

Select XML multiple only a few nodes with the same name

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试构造一条肥皂消息,并且能够使用单个选择构造整个消息。 除非问题是,仅在少数情况下,相同的节点名称会重复两次。

因此,例如,所需的输出结果应该像这样,带有两个单独的id root

<SoapDocument>
  <recordTarget>
    <patientRole>
      <id root="1.2.3.4" extension="1234567" />
      <id root="1.2.3.5.6" extension="0123456789" />
    </patientRole>
  </recordTarget>
</SoapDocument>

我试图用我对xpath的稀疏知识来构造节点名称,如下所示:

select
    '1.2.3.4'    AS 'recordTarget/patientRole/id[1]/@root',
    '1234567'    AS 'recordTarget/patientRole/id[1]/@extension',
    '1.2.3.5.6'  AS 'recordTarget/patientRole/id[2]/@root',
    '0123456789' AS 'recordTarget/patientRole/id[2]/@extension'
FOR XML PATH('SoapDocument'),TYPE

显然,xpath命名不能像这样应用于列名id[1]id[2]吗? 我是否在这里遗漏了一些东西,还是应该使用不同的符号? 构造所需结果的最简单方法是什么?

3 个回复

根据您的问题,我认为这不是表格数据,而是固定值,您正在创建医疗文档,大概是CDA。

尝试这个:

SELECT 
(
    SELECT
        '1.2.3.4'    AS 'id/@root',
        '1234567'    AS 'id/@extension',
        '',
        '1.2.3.5.6'  AS 'id/@root',
        '0123456789' AS 'id/@extension'
    FOR XML PATH('patientRole'),TYPE
) AS [SoapDocument/recordTarget]
FOR XML PATH('')

结果:

<SoapDocument>
  <recordTarget>
    <patientRole>
      <id root="1.2.3.4" extension="1234567" />
      <id root="1.2.3.5.6" extension="0123456789" />
    </patientRole>
  </recordTarget>
</SoapDocument>

一些解释:中间的空元素允许您在一个查询中放置两个具有相同名称的元素。 您可以通过多种方法将其添加到周围的标签中。 这只是一种可能性。

UPDATE

我想指出BdR的答案! 很棒的发现,值得投票!

关于Shnugo答案的详细说明,这使我使用“空列”尝试了一些操作。

如果您没有给emtpy列命名,它将重置为XML根节点。 因此,以下各列将从您当时所选择的XML根目录开始。 但是,如果您明确命名为空的分隔符列,则随后的列将在该列名设置的层次结构中继续。

因此,下面的选择也将产生所需的结果。 它有些微的不同,但是在我的情况下,它使我避免使用子选择。

select
    '1.2.3.4'    AS 'recordTarget/patientRole/id/@root',
    '1234567'    AS 'recordTarget/patientRole/id/@extension',
    ''           AS 'recordTarget/patientRole',
    '1.2.3.5.6'  AS 'recordTarget/patientRole/id/@root',
    '0123456789' AS 'recordTarget/patientRole/id/@extension'
FOR XML PATH('SoapDocument'),TYPE

这应该做的工作:

WITH CTE AS (
    SELECT *
    FROM (VALUES('1.2.3.4','1234567'),
                ('1.2.3.5.6','0123456789')) V ([root], [extension]))
SELECT (SELECT (SELECT (SELECT [root] AS [@root],
                               [extension] AS [@extension]
                        FROM CTE
                        FOR XML PATH('id'), TYPE)
                FOR XML PATH('patientRole'), TYPE)
        FOR XML PATH ('recordTarget'), TYPE)
FOR XML PATH ('SoapDocument');
2 随机选择具有相同名称的XML节点

我有这个XML文件: 我想当用户输入上面xml文件中指定的问题之一时,程序从节点中选择一个随机的答案。 例如,当用户输入“您最喜欢的编程语言是什么?”时 在TextBox中,程序必须随机生成PHP,C#,Java或VB.Net。 这是我的代码,但不正确: 输出: ...

3 如何为xslt的xml中的节点选择多个具有相同名称的标签?

我是Xslt的新手。 我正在尝试使用xslt来简化xml。 但是我面临两个问题: 1.)相同的标签名-我无法获取第二个标签名,只有一个被获取(xml中的PublisherItem标签) 2.)有多个嵌套的内部标签,它们具有相同的名称,我无法使用xslt来获取该名称。 (xml中 ...

5 xml中具有相同名称的多个节点

我有以下xml文件: - 现在,当我将输入节点作为“项目”来检索数据时,而不是显示所有项目节点,它只显示最后一个项目节点..... 我的代码是: - 这里,$ url是我的xml页面的url $ tag_name是节点的名称,在这种情况下它是“item” 我得到的 ...

7 读取具有相同名称的不同xml节点

对于以下xml 我正在尝试运行代码以遍历所有对象Student。 到目前为止,我所做的是(考虑到xmldoc是我的xmlDocuemtn变量) 发生的情况是,如果有两个名为Student的节点,则只有第一个学生姓名两次,如果有三个名为Student。的节点,则第三个学生姓名 ...

8 更改具有相同名称的XML节点?

大家! 我有一个XML文件,需要更改节点的值,特别是指示的行。 我的问题是,正如您所看到的,有很多节点。 我如何更改这条线? 这个XML文件可能更大,所以我正在寻找一种解决方案,该方案将考虑不同数量的“ launch.file”节点。 需要设置为True的节点将由相应的NAME ...

9 如何显示具有相同名称的XML节点?

我有一个要显示在Wordpress上的XML博客供稿。 这是XML节点的简单表示: 因此,您会注意到类别节点上方显示了3次,但始终具有相同的名称。 因此,当我使用下面的PHP在循环中显示XML节点时,我只能得到类别节点之一,因为其余节点不是唯一的。 有谁知道我如何显示所有这些类 ...

10 解析具有相同名称的Xml节点

当我尝试解析这个xml时遇到问题 我的程序只读了第一个ActivateOnEquip,但我想让它全部读完。 这是我的计划: 控制台只写入Attack : 2但我想要这个 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM