2014-04-17 114 views
0

搜索并尝试所有示例,但没有运气。我想从这个XML节点发现 '的自订' 的价值:SQL查找XML节点值

<?xml version="1.0" encoding="UTF-8"?> 
<AppMgmtDigest xmlns="http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDigest" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Application AuthoringScopeId="ScopeId_B831987C-E9E7-47D5-95A5-1EEAC7B035D5" LogicalName="Application_d030d07c-a5ef-419b-aa46-44ff0697050b" Version="13"> 
     <DisplayInfo DefaultLanguage="en-US"> 
      <Info Language="en-US"> 
       <Title>Adobe Acrobat Professional XI</Title> 
       <Publisher>Adobe</Publisher> 
       <Version>11.0.00</Version> 
       <Tags> 
        <Tag>Adobe Acrobat Professional XI</Tag> 
       </Tags> 
      </Info> 
     </DisplayInfo> 
     <DeploymentTypes> 
      <DeploymentType AuthoringScopeId="ScopeId_B831987C-E9E7-47D5-95A5-1EEAC7B035D5" LogicalName="DeploymentType_9193d006-04f2-41e5-8495-62bedf3f79e4" Version="10" /> 
     </DeploymentTypes> 
     <Title ResourceId="Res_814073674">Adobe Acrobat Professional XI</Title> 
     <Description ResourceId="Res_469365393" /> 
     <Publisher ResourceId="Res_231516204">Adobe</Publisher> 
     <SoftwareVersion ResourceId="Res_266572543">11.0.00</SoftwareVersion> 
     <CustomId ResourceId="Res_1915338015">**THIS IS ANSWER**</CustomId> 
     <AutoInstall>true</AutoInstall> 
     <Owners> 
      <User Qualifier="LogonName" Id="abc" /> 
     </Owners> 
     <Contacts> 
      <User Qualifier="LogonName" Id="abc" /> 
     </Contacts> 
     <HighPriority>1</HighPriority> 
     <AutoDistribute>true</AutoDistribute> 
    </Application> 
</AppMgmtDigest> 

我想要的(节点)值是 “THIS IS ANSWER”。我试过但没有运气:

select a.b.value('.','varchar(max)') 
    from @xml.nodes('//AppMgmtDigest/Application/CustomId') a(b); 
+0

您需要注册命名空间'“http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDigest”'或致电XPath表达式忽略了命名空间。 – helderdarocha

回答

0

您的XML有一个名称空间,您需要在XPath表达式中考虑这个名称空间。

您可以提取您想要文本不使用此XPath表达式考虑命名空间考虑:

//*[local-name()='AppMgmtDigest']/*[local-name()='Application']/*[local-name()='CustomId'] 

你可以试试:

select a.b.value('.','varchar(max)') 
    from @xml.nodes('//*[local-name()="AppMgmtDigest"]/*[local-name()="Application"]/*[local-name()="CustomId"]') a(b); 

您也可以注册了命名空间。你可能会对你的select查询之前添加这样的事情:

;with xmlnamespaces ('http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDige‌​st' as prefix) 

哪里prefix是任何你想要的前缀。然后你使用前缀来限定的XPath元素:

//prefix:AppMgmtDigest/prefix:Application/prefix:CustomId 
+0

谢谢我的朋友...我希望我在2天前提出这个问题并节省了时间。再次感谢,它的工作! – FromNY