I have a table with a column of type xml. I have to extract the values from the xml column. I have tried all possible ways and i couldn succeed.Please find below the sample of the xml data.
我有一个表格,其中包含xml类型的列。我必须从xml列中提取值。我已经尝试了所有可能的方法,但我无法成功。请在下面找到xml数据的示例。
<Menu>
<Id>1</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg</Url>
</Menu>
<Menu>
<Id>2</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg</Url>
</Menu>
<Menu>
<Id>3</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg</Url>
</Menu>
<Menu>
<Id>4</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg</Url>
</Menu>
<Menu>
<Id>5</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg</Url>
</Menu>
Please help me to extract the data. Tons of thanks in advance.
请帮我提取数据。提前谢谢。
Thanks, Darthick. s.darthick@gmail.com
谢谢,达斯克。 s.darthick@gmail.com
2 个解决方案
#1
2
declare @T table
(
XMLCol xml
)
insert into @T values
('<Menu>
<Id>1</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg</Url>
</Menu>
<Menu>
<Id>2</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg</Url>
</Menu>
<Menu>
<Id>3</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg</Url>
</Menu>
<Menu>
<Id>4</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg</Url>
</Menu>
<Menu>
<Id>5</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg</Url>
</Menu>')
select X.N.value('Id[1]', 'int') as Id,
X.N.value('Url[1]', 'varchar(max)') as Url
from @T as T
cross apply T.XMLCol.nodes('/Menu') as X(N)
Result:
Id Url
----------- ---------------------------------------------------------------------
1 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg
2 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg
3 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg
4 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg
5 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg
#2
1
If there is namespace. XML:
如果有命名空间。 XML:
<PersonInfo xmlns="http://mynamspace.lv/default">
<Person ID="22">
<Name>MyName</Name>
<Profession>MyProfession</Profession>
</Person>
</PersonInfo>
Then you should do something like this:
然后你应该做这样的事情:
WITH XMLNAMESPACES (DEFAULT 'http://mynamspace.lv/default')
SELECT
@myXML.value('(PersonInfo/Person/@ID)[1]', 'nvarchar(100)') as ID,
@myXML.value('(PersonInfo/Person/Name)[1]', 'nvarchar(100)') as Name,
@myXML.value('(PersonInfo/Person/Profession)[1]', 'nvarchar(100)') as Profession;
#1
2
declare @T table
(
XMLCol xml
)
insert into @T values
('<Menu>
<Id>1</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg</Url>
</Menu>
<Menu>
<Id>2</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg</Url>
</Menu>
<Menu>
<Id>3</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg</Url>
</Menu>
<Menu>
<Id>4</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg</Url>
</Menu>
<Menu>
<Id>5</Id>
<Url>http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg</Url>
</Menu>')
select X.N.value('Id[1]', 'int') as Id,
X.N.value('Url[1]', 'varchar(max)') as Url
from @T as T
cross apply T.XMLCol.nodes('/Menu') as X(N)
Result:
Id Url
----------- ---------------------------------------------------------------------
1 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-1.jpg
2 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-2.jpg
3 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-3.jpg
4 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-4.jpg
5 http://www.zmtcdn.com/menus/1211/menu-photo-for-barbeque-nation-5.jpg
#2
1
If there is namespace. XML:
如果有命名空间。 XML:
<PersonInfo xmlns="http://mynamspace.lv/default">
<Person ID="22">
<Name>MyName</Name>
<Profession>MyProfession</Profession>
</Person>
</PersonInfo>
Then you should do something like this:
然后你应该做这样的事情:
WITH XMLNAMESPACES (DEFAULT 'http://mynamspace.lv/default')
SELECT
@myXML.value('(PersonInfo/Person/@ID)[1]', 'nvarchar(100)') as ID,
@myXML.value('(PersonInfo/Person/Name)[1]', 'nvarchar(100)') as Name,
@myXML.value('(PersonInfo/Person/Profession)[1]', 'nvarchar(100)') as Profession;