【发布时间】:2021-10-29 14:25:18
【问题描述】:
我有许多结构完全不同的大型 XML 文档,其中包含许多不同级别的元素,我想从中选择几十个项目。问题是在完全不同的命名空间中有许多不同的文档类型,我都有相似的信息。所以我想让选择数据驱动。
我有一张桌子,我们称之为metadata。想象一下 f1 可能是某人的名字,f2 是他们的帐号,f3 是电话号码,等等:
doctype fldid xpath
--------- -------- --------------------------
abc f1 /document/g/h[1]
abc f2 /document/k/j/p/r/p[1]
abc f3 /document/a/e/d[1]
def f1 /info/d[1]
def f2 /info/r/e/d[1]
def f3 /info/e/s[1]
我们有一个名为mydatatable的数据表:
docid doctype docfield
------- --------- ------------------------
1 abc <document><n>.....
所以我想我可以做一个查询:
select
metadata.fldid as fldid,
mydatatable.docfield.value(metadata.xpath, 'nvarchar(max)') as data
from
mydatatable
inner join
metadata on mydatatable.doctype = metadata.doctype
where
mydatatable.docid = 1
我期待输出:
fldid data
------ --------------
f1 Tom
f2 344534534
f3 999-555-1212
但是,我得到了这个错误:
XML 数据类型方法“value”的参数 1 必须是字符串字面量。
所以这意味着我需要提前了解所有文档结构,或者我需要在元数据表中游标并将查询放入动态 SQL 中以创建此查询?
请注意,我不是在谈论具有相同元素名称的多个节点。我说的是具有不同(或相似)xpath 的所有不同元素名称。
【问题讨论】:
标签: sql-server xml