Sql server 2008 匹配并返回特定的XML节点

Sql server 2008 匹配并返回特定的XML节点,sql-server-2008,xquery,flwor,Sql Server 2008,Xquery,Flwor,我需要返回其ID属性在和之间匹配且节点的值属性为true的所有XML节点。 下面是我的XML结构示例: 3332 DCAB Graph.jpg 因此,我想要实现的是检索以下xml: 3332 DCAB Graph.jpg 因此,在ID=“PreferenceCode”的情况下,中对应的可见的属性是真的,因此需要返回它。我必须承认,我不知道如何在ID之间进行匹配。有什么帮助吗?处理XML时,请使用XQuery: DECLARE @MyXML xml = ' <HBDI>

我需要返回其ID属性在
之间匹配且
节点的
属性为
true
的所有XML节点。 下面是我的XML结构示例:


3332
DCAB
Graph.jpg

因此,我想要实现的是检索以下xml:


3332
DCAB
Graph.jpg


因此,在
ID=“PreferenceCode”
的情况下,
中对应的
可见的
属性是
真的
,因此需要返回它。我必须承认,我不知道如何在ID之间进行匹配。有什么帮助吗?

处理XML时,请使用XQuery:

DECLARE @MyXML xml = '
<HBDI>
    <Settings>
        <Setting ID="PreferenceCode" Visible="true"/>
        <Setting ID="SequenceCode" Visible="true"/>
        <Setting ID="QuadrantScores" Visible="false"/>
        <Setting ID="AdjectivePairs" Visible="false"/>
        <Setting ID="ModeScores" Visible="true"/>
        <Setting ID="Graph" Visible="true"/>
    </Settings>
    <Profile>
        <PreferenceCode ID="PreferenceCode">3332</PreferenceCode>
        <SequenceCode ID="SequenceCode">DCAB</SequenceCode>
        <Graph ID="Graph">Graph.jpg</Graph>
        <QuadrantScores ID="QuadrantScores">
            <QuadrantScore Name="A" Value="3" />
            <QuadrantScore Name="B" Value="3" />
            <QuadrantScore Name="C" Value="23" />
            <QuadrantScore Name="D" Value="46" />
        </QuadrantScores>
        <AdjectivePairs ID="AdjectivePairs">
            <AdjectivePair Name="A" Value="4" />
            <AdjectivePair Name="B" Value="7" />
            <AdjectivePair Name="C" Value="9" />
            <AdjectivePair Name="D" Value="10" />
        </AdjectivePairs>
        <ModeScores ID="ModeScores">
            <ModeScore Name="Lt" Value="34" />
            <ModeScore Name="Rt" Value="54" />
            <ModeScore Name="Upr" Value="3" />
            <ModeScore Name="Lwr" Value="24" />
        </ModeScores>
    </Profile>
</HBDI>'

SELECT      @MyXML.query('
<HDBI> {
    let $settings := /HBDI/Settings
    for $element in /HBDI/Profile/*
        where $settings/Setting[@ID = local-name($element) and @Visible = "true"]
        return $element
} </HDBI>
')
DECLARE@MyXML='xml'
3332
DCAB
Graph.jpg
'
选择@MyXML.query('
{
让$settings:=/HBDI/settings
对于/HBDI/Profile中的$element/*
其中$settings/Setting[@ID=localname($element)和@Visible=“true”]
返回$element
} 
')

XQuery循环遍历
标记的每个子节点,并检查它是否在
节点中设置为
@Visible=“true”
local-name()!