如何在BaseX中使用正则表达式删除元素

时间:2016-06-21 11:46:31

标签: regex xquery basex

我有一个具有以下格式的BaseX数据库

<root>
    <node1>
        <value1>abctetabc</value1>
        <value2>...</value2>
    </node1>
    <node1>
        <value1>abctatabc</value1>
        <value2>...</value2>
    </node1>
</root>

我想问一下如何删除其值包含tet的节点。 我要使用正则表达式吗?

正常删除就像这样执行

XQUERY delete root/node1[value1='abctatabc']

如何搜索子字符串?

1 个答案:

答案 0 :(得分:1)

如果要删除数据库中的节点,可以使用delete node root/node1[value1='abctatabc'](请参阅BaseX文档中的XQuery Update)。如果要在不更改原始文档的情况下删除它,可以使用update关键字:

document {
  <root>
      <node1>
          <value1>abctetabc</value1>
          <value2>...</value2>
      </node1>
      <node1>
          <value1>abctatabc</value1>
          <value2>...</value2>
      </node1>
  </root>
} update {
  delete node root/node1[value1 = 'abctatabc']
}

当然你也可以查找子串(通过fn:contains)或使用正则表达式(通过fn:matches):

delete node root/node1[matches(value1, 'abc')]