2012-01-05 9 views
1

上のフィルタを選択します。私は、各書き込みにはどうすればよいの問題のために、各書き込みIは、次のようになりノードを持つXML文書の持つ複数のフィールド

<SQLIndexUsage> 
    <Property Name="database_name">ClearTrace</Property> 
    <Property Name="Object_Name">CTTraceSummary</Property> 
    <Property Name="Schema_name">dbo</Property> 
    <Property Name="Index_name">IX_CTTraceSummary_Date</Property> 
    <Property Name="Type_Desc">NONCLUSTERED</Property> 
    <Property Name="user_seeks" /> 
    <Property Name="user_scans" /> 
    <Property Name="user_lookups" /> 
    <Property Name="user_updates" /> 
    <Property Name="usage_ratio">0.00</Property> 
    <Property Name="RowError" /> 
    <Property Name="RowState">Detached</Property> 
    <Property Name="Table" /> 
    <Property Name="ItemArray"> 
    <Property>ClearTrace</Property> 
    <Property>CTTraceSummary</Property> 
    <Property>dbo</Property> 
    <Property>IX_CTTraceSummary_Date</Property> 
    <Property>NONCLUSTERED</Property> 
    <Property /> 
    <Property /> 
    <Property /> 
    <Property /> 
    <Property>0.00</Property> 
    </Property> 
    <Property Name="HasErrors">False</Property> 
</SQLIndexUsage> 

をそれが複数のフィールドにフィルタを適用します選択し、私はこのようなことに取り組んでいました:

<xsl:for-each select="/objects/SQLIndexUsage/Property[@Name ='user_seeks'][1]!='' or /objects/SQLIndexUsage/Property[@Name ='user_scans']!='' or /objects/SQLIndexUsage/Property[@Name ='user_updates']!=''"> 

私はこれを間違って見ていますか?

/objects/SQLIndexUsage/Property[ 
    (@Name ='user_seeks' or @Name='user_scans' or @Name='user_updates') and .!=''] 

これはさらに短いです:一般的に

答えて

1

、あなたは、単一の述語で条件を維持する必要があり

/objects/SQLIndexUsage/Property[ 
    @Name[.='user_seeks' or .='user_scans' or .='user_updates'] and .!=''] 

これはあなたの位置条件によって少し複雑になっているが、あなたはまだすることができ(組合で)これを行う:

/objects/SQLIndexUsage/Property[@Name='user_seeks' and .!=''][1] | 
/objects/SQLIndexUsage/Property[ 
    (@Name='user_scans' or @Name='user_updates') and .!=''] 

:サンプルのXMLに表示されていないのに、式に/objectsを残しました。私はあなたが実際に大きな文書で作業していると思います。

関連する問題