如何使用xpath在SQL Server中查询XML元素的属性值

时间:2016-08-23 14:18:00

标签: sql-server xml xpath sql-server-2012

我想从存储到SQL Server数据库表的XML中读取一个属性。 我确认该列具有Options -MultiViews +FollowSymlinks RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^http://razor.avatarland.org$ [NC] RewriteCond %{REQUEST_styles.css} !-f RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L] #ERROR CODE ----------------------------------------------------------- ErrorDocument 400 /400.php ErrorDocument 401 /401.php ErrorDocument 403 /403.php ErrorDocument 404 /404.php ErrorDocument 500 /500.php #Folder access------------------------------------------------------- RewriteRule ^admin/?$ /404.php [NC,L] RewriteRule ^css/?$ /404.php [NC,L] RewriteRule ^download/?$ /404.php [NC,L] RewriteRule ^etc/?$ /404.php [NC,L] RewriteRule ^images/?$ /404.php [NC,L] RewriteRule ^password_protect/?$ /404.php [NC,L] RewriteRule ^profiles/?$ /404.php [NC,L] RewriteRule ^tos/?$ /404.php [NC,L] RewriteRule ^warning/?$ /404.php [NC,L] RewriteRule ^Tos-and-rules/?$ /terms.php [NC,L] #Error--------------------------------------------------------------- RewriteRule ^400/?$ /400.php [NC,L] RewriteRule ^401/?$ /401.php [NC,L] RewriteRule ^403/?$ /403.php [NC,L] RewriteRule ^404/?$ /404.php [NC,L] RewriteRule ^500/?$ /500.php [NC,L] #Main---------------------------------------------------------------- RewriteRule ^//?$ /index.php [NC,L] RewriteRule ^about/?$ /about.php [NC,L] RewriteRule ^contact/?$ /contact.php [NC,L] RewriteRule ^misc/?$ /misc.php [NC,L] RewriteRule ^upload/?$ /upload.php [NC,L] RewriteRule ^forum/?$ /forum.php [NC,L] RewriteRule ^chat/?$ /chat/index.php [NC,L] RewriteRule ^denied/?$ /denied.php [NC,L] #Admin---------------------------------------------------------------- RewriteRule ^adminpanel/?$ /adminpanel.php [NC,L] RewriteRule ^adminpanel/admin-rules/?$ /admin-rules.php [NC,L] RewriteRule ^adminpanel/promote-demote/?$ /admin/promote-demote.php [NC,L] RewriteRule ^adminpanel/log/?$ /admin/admin-log.php [NC,L] RewriteRule ^adminpanel/reported/?$ /admin/reported.php [NC,L] RewriteRule ^adminpanel/log/promoted-demoted/?$ /admin/promoted-demoted-log.php [NC,L] RewriteRule ^adminpanel/log/warnings/?$ /admin/warnings.php [NC,L] RewriteRule ^adminpanel/log/unban/?$ /admin/unban.php [NC,L] #Misc---------------------------------------------------------------- RewriteRule ^misc/members/?$ /members.php [NC,L] RewriteRule ^misc/download/?$ /download.php [NC,L] RewriteRule ^misc/top-members/?$ /top-members.php [NC,L] RewriteRule ^misc/games/?$ /games.php [NC,L] RewriteRule ^misc/sheepa/?$ /sheepa.php [NC,L] RewriteRule ^misc/sheepa/web-stat?$ /etc/sheepa_website.php [NC,L] RewriteRule ^misc/awards?$ /awardlist.php [NC,L] #Etc----------------------------------------------------------------- RewriteRule ^credits/?$ /etc/credits.php [NC,L] RewriteRule ^help/?$ /etc/help.php [NC,L] #Banned-------------------------------------------------------------- RewriteRule ^banned/?$ /banned.php [NC,L] #User---------------------------------------------------------------- RewriteRule ^signin/?$ /login.php [NC,L] RewriteRule ^signout/?$ /logout.php [NC,L] RewriteRule ^signup/?$ /register.php [NC,L] RewriteRule ^user/0/?$ /nouser.php [NC,L] RewriteRule ^inbox/?$ /profiles/inbox.php [NC,L] RewriteRule ^settings/?$ /settings.php [NC,L] RewriteRule ^settings/change-email-pw/?$ /profiles/change-info.php [NC,L] RewriteRule ^settings/change-bio/?$ /profiles/change-bio.php [NC,L] RewriteRule ^settings/change-avatar/?$ /profiles/change-avatar.php [NC,L] RewriteRule ^settings/change-clan_tag/?$ /profiles/change-clantag.php [NC,L] RewriteRule ^etc/bb-code/?$ /etc/bb-codes.php [NC,L] RewriteRule report/user/(.*)/ report_usere.php?id=$1 RewriteRule report/user/(.*) report_user.php?id=$1 #Users------------------------------------------------------------ RewriteCond %{THE_REQUEST} \s/user\.php\?id=([0-9]+)\s [NC] RewriteRule ^user/%1? [R=301,L] RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [L] #Message------------------------------------------------------------ RewriteCond %{THE_REQUEST} \s/message\.php\?id=([0-9]+)\s [NC] RewriteRule ^message/%1? [R=301,L] RewriteRule ^message/([0-9]+)/?$ message.php?id=$1 [L] #Message / Read-------------------------------------------------------- RewriteRule read-message/(.*)/ read-message.php?link=$1 RewriteRule read-message/(.*) read-message.php?link=$1 #Password------------------------------------------------------------ RewriteRule ^reset-password/?$ /password_protect/reset-pass.php [NC,L] RewriteRule ^reset-password/ticket/?$ /password_protect/pass_ticket.php [NC,L] RewriteRule ^reset-password/email-username/?$ /password_protect/pass_email_username.php [NC,L] #Forum------------------------------------------------------------ RewriteRule forum/(.*)/ forum_threads.php?link=$1 RewriteRule forum/(.*) forum_threads.php?link=$1 #Members---------------------------------------------------------- RewriteRule misc/members/(.*)/ members.php?page=$1 RewriteRule misc/members/(.*) members.php?page=$1 #Top-Members---------------------------------------------------------- RewriteRule misc/top-members/(.*)/ top-members.php?page=$1 RewriteRule misc/top-members/(.*) top-members.php?page=$1 #add friend------------------------------------------------------- RewriteRule user/addfriend/(.*)/ friend_system.php?id=$1 RewriteRule user/addfriend/(.*) friend_system.php?id=$1 数据类型。

我使用此查询来读取属性,但结果始终为NULL值。我不明白为什么。我在这里找到的所有例子都证实我做得恰到好处。

XML

以下是我使用的XML的摘录。

SELECT 
    SDMPackageDigest.value('(//DesiredConfigurationDigest/SoftwareUpdateBundle/Annotation/DisplayName/@Text)[1]', 'NVARCHAR(256)')
FROM
    v_UpdateInfo

2 个答案:

答案 0 :(得分:2)

您需要尊重 XML命名空间!

尝试这样的事情:

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/07/10/DesiredConfiguration',
                           'http://schemas.microsoft.com/SystemsCenterConfigurationManager/2009/06/14/Rules' AS ns)
SELECT 
    SDMPackageDigest.value('(/DesiredConfigurationDigest/SoftwareUpdateBundle/ns:Annotation/ns:DisplayName/@Text)[1]', 'NVARCHAR(256)')
FROM
    v_UpdateInfo

答案 1 :(得分:0)

{{1}}