如何从SQL Server列中的这种XML中选择文件名?
VALUE
的对象时,文件名才在属性File
中
像这样
<Object NAME="File">
<Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" />
</Object>
此子层次结构可放置在xml的任何级别上(参见下面的示例)
XML列可以包含0-N文件名,我需要这样的列表:
id, filename
--- ------------------------
1 \\mysvr\fiels\readme1.txt
1 \\mysvr\fiels\readme2.txt
2 \\mysvr\fiels\readme3.txt
2 \\mysvr\fiels\readme4.txt
XML内容示例:
declare @t1 table
( id int,
x XML
)
insert into @t1 (id, x)
select 1,N'<root name="name" id="12">
<class1>
<Object NAME="File">
<Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" />
</Object>
</class1>
<class1>
<subclass1>
<Object NAME="File">
<Parameter ID="10" NAME="Name" VALUE="\\mysvr\fiels\readme2.txt" />
</Object>
<Object NAME="bitmap">
<Parameter ID="11" NAME="my1" VALUE="bmp" />
</Object>
</subclass1>
</class1>
</root>'
union
select 2,N'<root name="name" id="12">
<class1>
<Object NAME="File">
<Parameter ID="13" NAME="Name" VALUE="\\mysvr\fiels\readme3.txt" />
</Object>
<Object NAME="Font">
<Parameter ID="22" NAME="Tahoma" VALUE="11" />
</Object>
</class1>
<class1>
<subclass1>
<Object NAME="File">
<Parameter ID="14" NAME="Name" VALUE="\\mysvr\fiels\readme4.txt" />
</Object>
</subclass1>
</class1>
</root>'
答案 0 :(得分:1)
试试这个:
SELECT
id,
Filename = ObjPrm.value('@VALUE', 'varchar(100)')
FROM @t1
CROSS APPLY x.nodes('//Object[@NAME="File"]/Parameter') AS Tbl(ObjPrm)
给我一个输出:
答案 1 :(得分:0)
为此,您可以执行以下操作。
定义要显示的特定详细信息的字符串。
您希望显示ID和名称,以便您的字符串看起来像这样。
String holder = "#id# -- #VALUE#"
然后在整个字符串中搜索两个“#”符号之间的值。
当您找到它们时,只需搜索引号内的值,然后显示它们。