2017-07-03 45 views
0

XMLがテーブルに格納されています。私はこれを取ることができる必要がありますXMLと特定の値を引き出します。Oracle XMLTABLEを使用してXMLから列を戻す方法

<ns1:Int32/>タグの値を返すためのコードを記述しましたが、まだ結果を返すことができませんでした。

私は、XMLTABLE機能を使用していくつかの例をオンラインで見つけましたが、残念ながら、これらの例の多くは私よりも簡単なXMLを使用しています。

XML

<Rule Priority="0" Description="Description 1" Active="True" ReevaluationBehavior="Always" Name="Name 1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow"> 
    <Rule.Condition> 
     <RuleExpressionCondition Name="{p3:Null}" xmlns:p3="http://schemas.microsoft.com/winfx/2006/xaml"> 
      <RuleExpressionCondition.Expression> 
       <ns0:CodeBinaryOperatorExpression Operator="BooleanAnd" xmlns:ns0="clr-namespace:System.CodeDom;Assembly=System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
        <ns0:CodeBinaryOperatorExpression.Right> 
         <ns0:CodeBinaryOperatorExpression Operator="GreaterThanOrEqual"> 
          <ns0:CodeBinaryOperatorExpression.Right> 
           <ns0:CodePrimitiveExpression> 
            <ns0:CodePrimitiveExpression.Value> 
             <ns1:Int32 xmlns:ns1="clr-namespace:System;Assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">11</ns1:Int32> 
            </ns0:CodePrimitiveExpression.Value> 
           </ns0:CodePrimitiveExpression> 
          </ns0:CodeBinaryOperatorExpression.Right> 
         </ns0:CodeBinaryOperatorExpression> 
        </ns0:CodeBinaryOperatorExpression.Right> 
       </ns0:CodeBinaryOperatorExpression> 
      </RuleExpressionCondition.Expression> 
     </RuleExpressionCondition> 
    </Rule.Condition> 
</Rule> 

SQL

SELECT Rules2.* 
FROM RULES Rules1, 
XMLTABLE 
(
    XMLNAMESPACES 
    (
     'http://schemas.microsoft.com/winfx/2006/xaml' AS "p3", 
     'clr-namespace:System;Assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' AS "ns0", 
     'clr-namespace:System;Assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' AS "ns1", 
     DEFAULT 'http://schemas.microsoft.com/winfx/2006/xaml/workflow' 
    ) 
    , 
    '/Rule/RuleExpressionCondition/CodeBinaryOperatorExpression/CodePrimitiveExpression' 
    PASSING XMLPARSE(CONTENT Rules1.RULE WELLFORMED) 
    COLUMNS "Int" INT PATH 'ns1:Int32' 
) 
Rules2 
; 

これですべてのヘルプは大歓迎です。

+0

"タグの値"はどういう意味ですか?あなたは値11を意味しますか? – mathguy

+0

はい、この例では11を意味します。 – Freddie2025

答えて

3

ns0の名前空間定義に間違ったURLがあります。 xmltableの間違ったパス。短いバージョンを使用することができます。またはフルパスを提供する。 /Rule/Rule.Condition/RuleExpressionCondition/RuleExpressionCondition.Expression/ns0:CodeBinaryOperatorExpression/ns0:CodeBinaryOperatorExpression.Right/ns0:CodeBinaryOperatorExpression/ns0:CodeBinaryOperatorExpression.Right/ns0:CodePrimitiveExpression/ns0:CodePrimitiveExpression.Value

SELECT Rules2.* 
FROM xmls Rules1, 
XMLTABLE 
(
    XMLNAMESPACES 
    (
     'http://schemas.microsoft.com/winfx/2006/xaml' AS "p3", 
     'clr-namespace:System.CodeDom;Assembly=System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' AS "ns0", 
     'clr-namespace:System;Assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' AS "ns1", 
     DEFAULT 'http://schemas.microsoft.com/winfx/2006/xaml/workflow' 
    ) 
    , 
    '//ns0:CodePrimitiveExpression.Value' 
    PASSING XMLPARSE(CONTENT Rules1.RULE WELLFORMED) 
    COLUMNS "Int" INT PATH 'ns1:Int32' 
) 
Rules2 
+0

大変ありがとうございます – Freddie2025

+1

短いバージョンを使用すると( '//'を使用するとパフォーマンスが低下しますが、再帰構造を検索しない限り '//'は避けてください –

0

私はこの問題は、検索式が

/Rule/RuleExpressionCondition/CodeBinaryOperatorExpression/CodePrimitiveExpressionであるということだと思います。

表現に複数のノードがありません。そうですか?

関連する問題