@mp:id总是按照XML Doc的顺序排列吗?

时间:2011-03-28 01:29:16

标签: sql sql-server xml sql-server-2008 sql-server-openxml

我正在使用OPENXML解析一些xml。我需要从XML中获取Identity以了解节点的顺序。

是@mp:id总是有序吗?我知道它们不是连续的,但它们至少是有序的吗?

例如,以下查询始终会以与XML完全相同的顺序生成结果吗?

    SELECT  row_number() OVER (ORDER BY OrderID) rn, 
            StepID, CONVERT(varchar(max), CONVERT(VARBINARY(max), StepID), 2), 
            [ACTION]
    FROM    OPENXML(@idoc, 'descendant::step |descendant::compref', 2)
            WITH ([OrderID] INT '@mp:id',
                  [StepID] INT '@id',
                  [Action] VARCHAR(max) 'parameterizedString[1]')
    ORDER BY rn

或者是@mp:id是一种元数据类型,它可以根据事物的保存方式以任何顺序排列吗?

1 个答案:

答案 0 :(得分:1)

您无法保证正确的订单。要拥有它,您可以生成数字序列(例如带有列号的NF表),然后使用带有position()函数的XPath查询XML:

SELECT NF.Number,Order_id FROM NF
CROSS APPLY(SELECT Table.Row.value('@Id','int') Order_Id
    FROM @xml.nodes('//Root/Order[position()=sql:column("NF.Number")]') AS Table(Row))  AS XMLTable