如何使用xml-patch和xpath使用名称空间修补xml文件?

s1m3n

我正在尝试使用XML-patch修补多个XML文件,更具体地说是使用此库https://github.com/dnault/xml-patch

我可以正确地修补任何不包含任何名称空间声明的xml文件我正在修补logback.xml文件,并且一切正常。

问题是当我尝试修补如下所示的web.xml文件时:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">

    <display-name>My App</display-name>
...
</web-app>

使用看起来像这样的xml补丁文件

<diff file="WEB-INF/web.xml">
    <add sel="web-app" >
        <simple>true</simple>
    </add>
</diff>

运行修补程序时,出现以下异常:

Caused by: com.github.dnault.xmlpatch.PatchException: no matches for selector "web-app"
    at com.github.dnault.xmlpatch.Patcher.selectNodes(Patcher.java:441)
    at com.github.dnault.xmlpatch.Patcher.add(Patcher.java:252)
    at com.github.dnault.xmlpatch.Patcher.patch(Patcher.java:85)
    at com.github.dnault.xmlpatch.Patcher.patch(Patcher.java:65)
    at com.github.dnault.xmlpatch.CommandLineDriver.main(CommandLineDriver.java:62)

我相当有信心,这可能与diff文件和名称空间有关,而我可能没有正确配置它们。

我尝试将名称空间声明添加到diff文件中,但是错误是相同的。

有任何想法吗?

wp78de

看来这是该工具的已确认问题但是,原始张贴者还提到了一种解决方法:

因此,实际上我不得不两次声明defaultnamespace,以便允许选择和添加新节点,而不必用“ cfg:”前缀一一添加前缀。请参见以下示例:

在您的示例中,patch.xml应该看起来像这样。

<diff xmlns:app="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" metadata-complete="true">
    <add sel="app:web-app">
        <simple>true</simple>
    </add>
</diff>

这样修补成功。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章