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

How to delete elements with regex in 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']

如何搜索子字符串?

如果要删除数据库中的节点,可以使用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) or use regular expressions (via fn:matches):

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