我有一个看起来像这样的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>我要删除引用/ID/@Source= "PubMed“且引用/ID为空的引用元素节点
这只会删除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]') 似乎应该有一个简单的解决方案,我不喜欢。有什么建议吗?谢谢
发布于 2013-01-11 20:53:45
您的第二个检查是检查错误元素的长度-它查看的是(.),这里是Citation元素(因为它在Citation元素的谓词中)。改为使用
SET @myBlob.modify('
delete //Citation[ID/@Source = ''PubMed''
and string-length(string(number(ID[1]))) = 0]') 其中我已经将.更改为ID[1]。因为"'number()' requires a singleton (or empty sequence)“,所以需要[1]。
https://stackoverflow.com/questions/14278323
复制相似问题