1

如何从 SQL Server 列中的这种 XML 中选择文件名?

  1. VALUE仅当高级标记是具有File 这样名称的对象时,文件名才在属性中

    <Object NAME="File">
        <Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" />
    </Object>
    
  2. 此子层次结构可以放置在任何级别的 xml 上(参见下面的示例)

  3. 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>'
4

2 回答 2

1

试试这个:

SELECT
    id,
    Filename = ObjPrm.value('@VALUE', 'varchar(100)')
FROM @t1
CROSS APPLY x.nodes('//Object[@NAME="File"]/Parameter') AS Tbl(ObjPrm)

给我一个输出:

在此处输入图像描述

于 2012-11-06T12:15:52.830 回答
0

为此,您可以执行以下操作。

定义要显示的特定详细信息的字符串。

您想显示 id 和 Name 以便您的字符串看起来像这样。

String holder = "#id# -- #VALUE#"

然后在整个字符串中搜索两个“#”符号之间的值。

当您找到它们时,只需搜索引号内的值并显示它们。

于 2012-11-06T11:07:37.383 回答