当前位置: 首页 > 面试题库 >

对于XML路径:如何将属性和值保留在同一节点中

焦正德
2023-03-14
问题内容

使用时出现一些问题FOR XML PATH。我的情况是:

我已经如下运行脚本,属性CCY和的值AMOUNT被合并到同一节点:

脚本1:

SELECT 'USD' AS 'Amount/@Ccy',
       123000 AS Amount,
       'Foo' AS Foo
FOR XML PATH('root'), TYPE;

结果1:AMOUNT节点中只有1个root节点

<root>
  <Amount Ccy="USD">123000</Amount>
  <Foo>Foo</Foo>
</root>

脚本2:我将的顺序更改为Foo中间,结果是错误的

SELECT 'USD' AS 'Amount/@Ccy',
       'Foo' AS Foo,
       123000 AS Amount
FOR XML PATH('root'), TYPE;

结果2:AMOUNT根节点中有2个节点

<root>
  <Amount Ccy="USD" />
  <Foo>Foo</Foo>
  <Amount>123000</Amount>
</root>

所以我的问题是:如何将它们放在同一个节点中而不将它们放在一起。谢谢


问题答案:

这意味着它可以工作…

引擎沿列列表向下移动,打开一个元素,填充嵌套的元素,找到一个新元素(哦!我必须关闭最后一个元素!)…等等。

必须 在contains 元素之前 声明一个属性。顺序很重要!

试试看:

-相同的名称:您可能会感到惊讶

SELECT 1 AS [SomeElement]
      ,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');

-两者之间的不同名称

SELECT 1 AS [SomeElement]
      ,'in between' AS [SomeOther]
      ,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');

-不同的元素是-很好-不存在(您也可以使用NULL)

SELECT 1 AS [SomeElement]
      ,''
      ,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');

-您认为这里会发生什么?

SELECT 'blah' AS [SomeElement/@TheAttribute]
      ,1 AS [SomeElement]
      ,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');

- …和这里?

SELECT 'blah' AS [SomeElement/@TheAttribute]
      ,1 AS [SomeElement]
      ,''
      ,'blub' AS [SomeElement/@TheAttribute]
      ,2 AS [SomeElement]
FOR XML PATH('SomeTag'),ROOT('root');

-这是-最后-您的示例(原则上)

SELECT 1 AS [SomeElement]
      ,'in between' AS [SomeOther]
      ,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');

-还有-只是为了好玩!-也尝试一下

SELECT 1 AS [SomeElement]
      ,NULL
      ,'blub' AS [SomeElement/@TheAttribute]
FOR XML PATH('SomeTag'),ROOT('root');


 类似资料:
  • 如何能够基于另一个同级节点的属性选择节点属性?我想要实现的是从所有节点中提取链接(href值),这些节点后跟具有属性class=“body table news loss”的节点跨度,即选择器应该返回https://finance.yahoo.com/news/inspiremd-announces-planned-recapitalization-120000752.html在下面的示例中。我试

  • 问题内容: 我正在尝试读取xml文件,例如: 这是我到目前为止的代码: 这是我尝试编写此代码的尝试,怎么说都不成功,这就是我开始赏金的原因。这是http://pastebin.com/huKP4KED。 赏金更新: 我确实真的尝试了好几天,但现在没想到会这么难,我会接受有用的链接/书籍/教程,但更喜欢代码,因为我昨天需要这样做。 这是我需要的: 关于上面的xml: 我需要获取标题ID的值 temp

  • 对于下面的XML,我正在尝试根据属性和节点值提取节点。 基于属性class=pass和h1包含('objectives'),我试图提取以下输出。 “目标”是节点值字符串“1任务目标”的一部分 1任务目标1目标2 下面是我正在尝试的XPath表达式。然而,这并没有产生任何输出。你能指出我做错了什么吗? 谢谢

  • 嗨,下面是我的XML文件。 上面的XML文件包含父根作为打印,子节点作为一部分。我想在C#中读取子节点及其属性。若XML文件包含唯一的节点名,那个么我可以读取它们。但如果所有子节点都包含相同的节点名,那么我们如何读取它们呢。

  • 我目前正在为XML文档流开发一个自定义管道组件,其中根节点和该根节点的第一个子节点需要剥离,只剩下第二个子节点(现在是新的根节点)。 我正在使用XDocumt作为XML文档的容器类。我写了一些代码,获取第二个子节点,并创建一个新的XML文档,将该节点作为根节点,从而从图片中删除两个不需要的节点。 但是当我在Biztalk中测试这个设置时,我只得到一个空文档作为响应。它似乎创建了一个空的XML文档,

  • 我很难使用下面的用例。 以下是XML: 我想要实现的是基于节点