2012-01-25 5 views
10

私は、次のパスを持っている:Coalesce演算子のXPathに相当するものは何ですか?

  • /私:会社/ NS1:監査/ NS1:訪問/ NS1:customField10
  • /私:会社/ NS1:監査/ NS1:訪問/ NS1:ACCOUNTNUMBER

空でない場合はns1:customField10を選択します。それ以外の場合はns1:accountNumberを返します。

私は次のことを試してみました:

xml.SelectSingleNode(
    "(/my:cobius/ns1:Audit/ns1:Visit/ns1:customField10 | 
    /my:cobius/ns1:Audit/ns1:Visit/ns1:accountNumber)", ns) 

しかし、それは常にACCOUNTNUMBERを返しています。私はcustomField10とaccountNumberの順番を変えようとしましたが、喜びはありませんでした。それでもaccountNumberを返します。

どのように私は、XPathで合体演算子と同等のものを行うことができますか?

更新:

xml.SelectSingleNode(
    "(/my:company/ns1:Audit/ns1:Visit/ns1:customField10[normalize-space()] | 
    /my:company/ns1:Audit/ns1:Visit/ns1:accountNumber[not(normalize-space(../ns1:customField10))])", ns) 
+0

がなぜない 'xml.SelectSingleNode()'その後、両方のノードと、通常の ''場合は...のために:

あなたはもちろん、述語を追加することができますか? – Tomalak

+1

あなたが合体オペレータが何であるか、あるいはどんな速度で、そのようなオペレータを持っていると考えているのかを教えてくれれば、あなたの質問に答える方が簡単かもしれません。 –

+0

@Tomalak同じ理由で、私はSQLまたはC#で合体演算子を使用します。 2つの変数を割り当ててチェックするのではなく、インラインで行うのはなぜですか? –

答えて

5

ノードは(SQLのNULLと同等の一種)を欠落していた場合はあなたのコードは動作します:

ここでは、最終的なコードです。しかし、空ではありません(SQLの空の文字列のように)。

/my:cobius/ns1:Audit/ns1:Visit/ns1:customField10[string-length(.)] | /my:cobius/ns1:Audit/ns1:Visit/ns1:accountNumber 
+0

実際、 '/ foo [string-length()]のようになります。/bar [not(/ foo [string-length()])] ' – Tomalak

+0

' | 'はある種の短絡論理ではありません。それは組合オペレータです。言い換えれば、両方が存在する場合、両方を取得しますが、これはOPが望むものではありません。 –

+0

@lwburk:必ずしもそうではありません、上記のコメントを参照してください。 ;) – Tomalak

関連する問題