xmltasks не работает - PullRequest
       24

xmltasks не работает

4 голосов
/ 07 октября 2011

У меня есть следующая задача, и по какой-то причине мой файл не соответствует:

<xmltask source="nbproject/project.xml" dest="nbproject/project.xml">
        <replace path="/project/configuration/data/class-path-extension/runtime-relative-path/text()" 
        withText="ext/extensions/${extension-lib.dist.jar}.jar"/>
        <replace path="/project/configuration/data/class-path-extension/binary-origin/text()" 
        withText="${original.project.dir}/dist/${extension-lib.dist.jar}.jar"/>
</xmltask>

Вот XML-файл, который я ищу:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
    <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
        .
        .
        .
        <class-path-extension>
            <runtime-relative-path>ext/extensions/Zone_x.jar</runtime-relative-path>
            <binary-origin>../../Simple Marauroa Java/Zone Extension/dist/Zone_y.jar</binary-origin>
        </class-path-extension>
    </data>
</configuration>

Я удалил материал, не важный для этого вопроса.Использование плагина Xpath для NetBeans в одном и том же файле показывает совпадения для ext / extensions / Zone_x.jar и ../../Simple Marauroa Java / Zone Extension / dist / Zone_y.jar соответственно, но задача их не видит.

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 06 июня 2012

Проблема в том, что входной XML использует пространства имен.Решение состоит в том, чтобы использовать *[local-name()='project'] вместо project и т. Д., Что означает, что вам нужно написать

<xmltask source="nbproject/project.xml" dest="nbproject/project.xml">
    <replace path="/*[local-name()='project']/*[local-name()='configuration']/*[local-name()='data']/*[local-name()='class-path-extension']/*[local-name()='runtime-relative-path']/text()" 
        withText="ext/extensions/${extension-lib.dist.jar}.jar"/>
    <replace path="/*[local-name()='project']/*[local-name()='configuration']/*[local-name()='data']/*[local-name()='class-path-extension']/*[local-name()='binary-origin']/text()" 
        withText="${original.project.dir}/dist/${extension-lib.dist.jar}.jar"/>
</xmltask>
1 голос
/ 03 июня 2015

просто используйте ":" для локального пространства имен. Ex.

replace path = "/: project /: configuration /: data /: расширение пути к классу /: время выполнения относительного пути / text ()"

Справочный документ = https://today.java.net/article/2006/10/31/xml-manipulation-using-xmltask

Читать раздел - Пути и пространства имен

...