xml - 如何查询 XML 值,获取 null
问题描述
我正在尝试使用 .rdl 文件来提取某些信息。我已经尝试过了,结果是 null 并且无法弄清楚。xml 新手 这里是 TSql:
DECLARE @xml xml
SET @xml= '<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
<DataSets>
<DataSet>
<Query>
<DataSourceName>SyteLine</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ItemABCAnalysisSp</CommandText>
</Query>
</DataSet>
</DataSets>
</Report>'
DECLARE @Value nvarchar(100)
SELECT @xml.value('(/rd:Report/DataSets/DataSet/Query/CommandType)[1]', 'nvarchar(100)' )
解决方案
您需要指定一个默认命名空间。
SQL
DECLARE @xml xml = '<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
xmlns:cl="http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition"
xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition">
<DataSets>
<DataSet>
<Query>
<DataSourceName>SyteLine</DataSourceName>
<CommandType>StoredProcedure</CommandType>
<CommandText>ItemABCAnalysisSp</CommandText>
</Query>
</DataSet>
</DataSets>
</Report>';
;WITH XMLNAMESPACES (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition')
SELECT @xml.value('(/Report/DataSets/DataSet/Query/CommandType/text())[1]', 'NVARCHAR(100)') AS [CommandType];
输出
+-----------------+
| CommandType |
+-----------------+
| StoredProcedure |
+-----------------+
推荐阅读
- hibernate - ExampleMatcher.withIgnorePath 正在获取被忽略的属性路径
- amazon-web-services - 使用 s3-dist-cp 跨 AWS 账户复制 S3 文件
- c# - WinForms 设计器中出现错误“找到的程序集的清单定义与程序集引用不匹配”
- ios - Xcode 10:无法附加数据库错误
- javascript - 访问组件内的模板变量
- php - 将数字除以 2 个多维数组
- java - 如何使用 html 模板在 java 电子邮件中添加图像
- typescript - 将 Vue.js 导入打字稿文件的最简单方法是什么?
- javascript - Node.js Express.js MongoDB:route.post() 需要回调函数,但得到了 [object Undefined]
- typescript - Angular5中声明类型的数组 - 打字稿