从sql中的xml中提取具有相同xpath的多个实例
我有这样一个xml:从sql中的xml中提取具有相同xpath的多个实例,sql,sql-server,xml,tsql,xpath,Sql,Sql Server,Xml,Tsql,Xpath,我有这样一个xml: <root> <parentTag> <child1>p1c1</child1> <child2>p1c2</child2> <child3>p1c3</child3> </parentTag> <parentTag> <child1>p2c1</child1> <
<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>
DECLARE @xml XML=N'<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>';
SELECT nd.value('(*[local-name()="child1"])[1]','nvarchar(max)') AS Child1
,nd.value('(*[local-name()="child2"])[1]','nvarchar(max)') AS Child2
,nd.value('(*[local-name()="child3"])[1]','nvarchar(max)') AS Child3
FROM @xml.nodes('/root/parentTag') AS A(nd)
此外,表中有多条记录具有相同的xml,我试图从所有记录中获取child1、child2和child3记录中的所有数据。请帮助。您没有标记RDBMS,这是SQL Server语法。但是-由于您也使用了
XPath
-标记,其他DBMS将处理类似的问题
首先使用类似于.nodes()
的函数来按行获取
-节点。然后使用XQuery
-expression[local-name()=“child1”]
读取具有给定名称的子元素
试着这样做:
<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>
DECLARE @xml XML=N'<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>';
SELECT nd.value('(*[local-name()="child1"])[1]','nvarchar(max)') AS Child1
,nd.value('(*[local-name()="child2"])[1]','nvarchar(max)') AS Child2
,nd.value('(*[local-name()="child3"])[1]','nvarchar(max)') AS Child3
FROM @xml.nodes('/root/parentTag') AS A(nd)
其余部分与上面相同。您没有标记RDBMS,这是SQL Server语法。但是-由于您也使用了
XPath
-标记,其他DBMS将处理类似的问题
首先使用类似于.nodes()
的函数来按行获取
-节点。然后使用XQuery
-expression[local-name()=“child1”]
读取具有给定名称的子元素
试着这样做:
<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>
DECLARE @xml XML=N'<root>
<parentTag>
<child1>p1c1</child1>
<child2>p1c2</child2>
<child3>p1c3</child3>
</parentTag>
<parentTag>
<child1>p2c1</child1>
<child2>p2c2</child2>
<child3>p2c3</child3>
</parentTag>
<parentTag>
<child1>p3c1</child1>
<child2>p3c2</child2>
<child3>p3c3</child3>
</parentTag>
</root>';
SELECT nd.value('(*[local-name()="child1"])[1]','nvarchar(max)') AS Child1
,nd.value('(*[local-name()="child2"])[1]','nvarchar(max)') AS Child2
,nd.value('(*[local-name()="child3"])[1]','nvarchar(max)') AS Child3
FROM @xml.nodes('/root/parentTag') AS A(nd)
其余部分与上面相同。标签
sql
不够。。。请始终标记实际的RDBMS(供应商和版本)!标签sql
不够。。。请始终标记实际的RDBMS(供应商和版本)!好的,如何引用表中的xml?xmltype的列名是xml_infook,如何引用表中的xml?xmltype的列名是xml_info