【问题标题】:SQL find XML node valueSQL 查找 XML 节点值
【发布时间】:2014-04-17 18:16:18
【问题描述】:

在这里搜索并尝试了所有示例,但没有运气。我想从此 XML 中找到节点“CustomID”的值:

<?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>

我想要的(节点)值是“这是答案”。我试过了,但没有运气:

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

【问题讨论】:

  • 您需要注册命名空间"http://schemas.microsoft.com/SystemCenterConfigurationManager/2009/AppMgmtDigest" 或调用您的XPath 表达式忽略命名空间。

标签: sql xml xpath namespaces sccm


【解决方案1】:

您的 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

【讨论】:

  • 谢谢我的朋友...我希望我在两天前问这个问题并节省时间。再次感谢,它成功了!
猜你喜欢
  • 1970-01-01
  • 2022-12-06
  • 2018-08-24
  • 1970-01-01
  • 2018-09-09
  • 2014-04-25
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多