ren*_*rof 6 xml sql t-sql sql-server
我有一个XML:
<?xml version="1.0" encoding="utf-16"?>
<ExportProjectDetailsMessage xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project">
<CPProjectId>7665699f-6772-424c-8b7b-405b9220a8e7</CPProjectId>
</ExportProjectDetailsMessage>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下方法将CPProjectId作为Uniqueidentifier:
DECLARE @myDoc xml
DECLARE @ProdID varchar(max)
SET @myDoc = '<ExportProjectDetailsMessage xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Project"><CPProjectId>7665699f-6772-424c-8b7b-405b9220a8e7</CPProjectId></ExportProjectDetailsMessage>'
SET @ProdID = @myDoc.value('(ExportProjectDetailsMessage/CPProjectId)[1]', 'varchar(max)' )
SELECT @ProdID
Run Code Online (Sandbox Code Playgroud)
我只能收到的是NULL = /我在@ myDoc.value上尝试了很多组合,但没有结果= /
如何从XML中检索值?
谢谢!
--EDIT:我注意到的东西,当我从XML中删除命名空间声明时,它工作正常!问题是我需要这个命名空间!= /
你是对的,命名空间就是问题所在。您的查询正在查找节点 ExportProjectDetailsMessage 但此类节点在您的文档中不存在,因为文档中声明了一个默认命名空间。由于您无法删除它(也不应该),因此您应该将其包含在您的 XPATH 查询中,如下所示:
set @ProdId = @myDoc.value('
declare namespace PD="http://schemas.datacontract.org/2004/07/Project";
(PD:ExportProjectDetailsMessage/PD:CPProjectId)[1]', 'varchar(max)' )
Run Code Online (Sandbox Code Playgroud)
您可能还想考虑不使用 varchar(max) 但也许使用 uniqueidentifier
| 归档时间: |
|
| 查看次数: |
3159 次 |
| 最近记录: |