从以下代码中如何只获取子元素值一次。即 当我从root->解析父 - >孩子 - >我需要为子元素标记循环以获取所有子元素值,然后解析为父元素的结尾和根元素的结尾。我不想去下一个父母 - >下一个孩子。
<root>
<parent>
<name>g</name>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
<parent>
<name>s</name>
<age>23</age>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
<parent>
<name>t</name>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
在这里,我只需要获取子元素值一次而不解析整个文件。当我写xml文件时,我知道所有父节点的这些元素值是相同的。在这种情况下,如何从上面的文件中获取child1,child2,child3。
答案 0 :(得分:0)
试试这个:
DECLARE @XML XML = '<root>
<parent>
<name>g</name>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
<parent>
<name>s</name>
<age>23</age>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
<parent>
<name>t</name>
<child>child1</child>
<child>child2</child>
<child>child3</child>
</parent>
</root>'
SELECT
ChildNodeName = XC.value('(.)[1]', 'varchar(50)'),
ParentName = XC.value('(../name)[1]', 'varchar(50)')
FROM
@XML.nodes('/root/parent/child') AS XT(XC)
基本上,使用<child>
获取所有.nodes()
节点的列表,然后迭代这些子节点 - 输出您需要的内容。要访问每个<child>
节点的“父”节点,请使用../name
XPath表达式。
更新:如果您只想要不同的子数据 - 请使用此查询:
SELECT
DISTINCT ChildNodeName = XC.value('(.)[1]', 'varchar(50)')
FROM
@XML.nodes('/root/parent/child') AS XT(XC)