XPath删除单个节点(通过Saxon CLI)

时间:2018-08-28 09:59:05

标签: xpath xquery saxon xpath-2.0

我想从XML文件中删除一个节点(使用SaxonHE9-8-0-11J):

    WearableRecyclerView slots_rv = findViewById(R.id.slots_rv);
 .....


        WearableLinearLayoutManager wearableLinearLayoutManager =
            new WearableLinearLayoutManager(this, customScrollingLayoutCallback);
    slots_rv.setLayoutManager(
            wearableLinearLayoutManager);
    slots_rv.setCircularScrollingGestureEnabled(true);
    wearableLinearLayoutManager.scrollToPosition(slotsAdapter.getPositionToFocus());
    slots_rv.scrollToPosition(slotsAdapter.getPositionToFocus());
    slots_rv.getLayoutManager().scrollToPosition(slotsAdapter.getPositionToFocus());
    slots_rv.setAdapter(slotsAdapter);

显然,do this有两种方法。 XPath1:使用not函数 XPath2:使用except子句。但是两者都只是返回整个节点集。

具有not功能:

let a = { x:{z:1} , y: 2};
let b = JSON.parse(JSON.stringify(a))

带有except子句:

<project name="Build">
  <property name="src" value="src/main/resources" />
  <property name="target" value="target/classes" />

  <condition property="target.exists">
    <available file="target" />
  </condition>
</project>

使用-explain开关,查询为:

saxonb-xquery -s:test.xml -qs:'*[not(local-name()="condition")]'

saxonb-xquery -s:test.xml -qs:'* except condition'

1 个答案:

答案 0 :(得分:1)

通常,XPath从一个或多个输入文档中选择节点,它不允许您构造新的节点,因为您需要XSLT或XQuery。并且,如果要达到此目的,则除去condition根的project子级,即使使用/*/(* except condition),也需要使用XPath对XSLT或XQuery进行操作。然后获取除condition元素之外的所有子元素,但要作为一个序列,而不是包装到根中。

因此,您可以使用XQuery

/*/element {node-name()} { * except condition }

作为一种紧凑但通用的方式来重建除conditionhttps://xqueryfiddle.liberty-development.net/948Fn5b

以外的所有子元素的任何根

是否通过命令行shell获得这样的表达式是一个不同的问题,在具有Powershell窗口和cmd shell的Windows上,它可以供我使用

-qs:"/*/element {node-name()} { * except condition }"