【问题标题】:how to use node() to select data from this xml如何使用 node() 从此 xml 中选择数据
【发布时间】:2021-12-16 22:55:16
【问题描述】:

我已经阅读了一些关于 Internet regrading node() 方法从 xml 中提取数据的文章。

我有这个 xml:

    <root><startsite personID="1" SaleID="2" regionID="3"/> </root>

我想从 xml 中获取 personID、SaleID、region ID。我尝试的是:

SELECT T.c.query('.') AS result  
FROM   @x.nodes('/Root/startsite ') T(c)

但它显示错误。你能帮忙吗?

【问题讨论】:

  • “但它显示错误。” 那是什么错误?
  • 查看您的 XML,它是无效的。要解析 XML,它必须是有效的 XML。例如,personID"1" 应该是 personID="1"。您还打开 2 个root 节点,并且都不关闭。

标签: sql-server xml


【解决方案1】:

你应该修复上面提到的xml并使用“value”方法来提取数据。

DECLARE @x XML   
SET @x='<root><startsite personID="1" SaleID="2" regionID="3"/></root>'  

SELECT c.value('@personID', 'Int') As personID,
       c.value('@SaleID', 'Int') As SaleID,
       c.value('@regionID', 'Int') As regionID
FROM @x.nodes('/root/startsite') T(c)  

【讨论】:

  • 谢谢安东,我是新的蜜蜂,使用 node() 方法。你能解释一下为什么你使用变量,即@personID 来获得结果吗?
  • @Phh 欢迎您!它不是一个变量。它是节点中的属性指定。 Here 是对 XPath 的初步描述。
【解决方案2】:

基本语法如下所示

nodes (XQuery) as Table(Column)

然后查询从每一行返回上下文节点

DECLARE @x XML   
SET @x='<Root>  
    <row id="1"><name>Larry</name><oflw>some text</oflw></row>  
    <row id="2"><name>moe</name></row>  
    <row id="3" />  
</Root>'  
SELECT T.c.query('.') AS result  
FROM   @x.nodes('/Root/row') T(c)  
GO

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多