我从数据库获取XML有一个简单的问题。现在,这个XML里面没有值,如下所示:
<TryXML xmlns="">
<TryXML_XML_VERSION>1.0</TryXML_XML_VERSION>
<TITLE_DESC />
<ISCI_CODE />
<PRODUCT_DESC />
<PLAY_LENGTH />
<START_TIME />
<COMPRESSION_LEVEL_CODE />
<ENCODER_TYPE_DESC />
<OUTPUT_RATE />
<FRAME_RATE />
<FILE_NAME />
<FILE_SIZE />
<COPY_DATE />
<ADVERTISER />
<AGENCY_VENDOR />
</TryXML>
或者它可以包含值,例如
<TryXML xmlns="">
<TryXML_XML_VERSION>1.0</TryXML_XML_VERSION>
<TITLE_DESC>asd</TITLE_DESC>
<ISCI_CODE>asd</ISCI_CODE>
<PRODUCT_DESC>sd</PRODUCT_DESC>
<PLAY_LENGTH>asdklgh</PLAY_LENGTH>
<START_TIME>sdghkl</START_TIME>
<COMPRESSION_LEVEL_CODE />
<ENCODER_TYPE_DESC />
<OUTPUT_RATE />
<FRAME_RATE />
<FILE_NAME>sdfgjkl</FILE_NAME>
<FILE_SIZE />
<COPY_DATE />
<ADVERTISER>sdfgklj</ADVERTISER>
<AGENCY_VENDOR>sdfgjkl</AGENCY_VENDOR>
</TryXML>
如何检查所述XML节点是否具有值?注意:值可以是字母数字。
答案 0 :(得分:4)
假设您使用的是SQL Server,则可以使用value
:
declare @t table (col1 xml)
insert @t values ('<root><a>val</a></root>')
insert @t values ('<root><a></a></root>')
insert @t values ('<root><a/></root>')
insert @t values ('<root></root>')
select *
from @t
where col1.value('(/root/a)[1]','varchar(50)') <> ''
这仅显示第一行,其中/root/a
具有值。根据评论中的请求,使用case
:
select case
when col1.value('(/root/a)[1]','varchar(50)') is null then 'Null'
else 'Not Null'
end
from @t
答案 1 :(得分:0)
如果问题是,如何识别(并区分)“null” - 字段和空字符串的字段,您应该考虑重新设计数据库表和导出脚本:
1)在数据库表中引入“null”字段。
2)
如果字段的值为“null”,则根本不要导出此字段。
如果某个字段的字符串为空,请将其导出 - 就像您现在正在执行此操作一样。