2

次のようなxmlがあります

<MeasureSet>
    <MeasureSetType val_type="name">Variant</MeasureSetType>
    <Measure>
      <MeasureType val_type="name">single nucleotide variant</MeasureType>
      <AttributeSet>
        <MeasureAttributeType val_type="name">HGVS</MeasureAttributeType>
        <Attribute>NM_000054.4:c.838dupT</Attribute>
      </AttributeSet>
      <Citation>
        <CitationType val_type="name">general</CitationType>
        <ID Source="PubMed">10820168</ID>
      </Citation>
      <Citation>
        <CitationType val_type="name">general</CitationType>
        <ID Source="PubMed" />
      </Citation>
      <Citation>
        <CitationType val_type="name">general</CitationType>
        <ID Source="PubMed">9773787</ID>
      </Citation>
      <Citation>
        <CitationType val_type="name">general</CitationType>
        <ID Source="PubMed">18726898</ID>
      </Citation>
      <Citation>
        <CitationType val_type="name">general</CitationType>
        <ID Source="PubMed" />
      </Citation>
    </Measure>
  </MeasureSet>

Citation/ID/@Source = "PubMed" で Citation/ID が空の Citation 要素ノードを削除したい

これにより、ID 要素のみが削除されますが、正しい要素は削除されます

SET @myBlob.modify('delete //Citation/ID[@Source = ''PubMed''
      and string-length(string(number(.))) = 0]') 

これにより、すべての引用要素が削除されます

SET @myBlob.modify('delete //Citation[ID/@Source = ''PubMed''
      and string-length(string(number(.))) = 0]') 

私が思いつかない簡単な解決策があるはずです。助言がありますか?ありがとう

4

1 に答える 1

2

あなたの2番目のものは間違った要素の長さをチェックしています -(.)ここではCitation要素である を見ています(要素の述語にあるためCitation)。代わりに使用

SET @myBlob.modify('
      delete //Citation[ID/@Source = ''PubMed'' 
                        and string-length(string(number(ID[1]))) = 0]') 

に変更.しましたID[1]。" "のため、[1]が必要です'number()' requires a singleton (or empty sequence)

于 2013-01-11T12:53:45.397 に答える