2013-12-17 1 views
2

У меня есть эта application.xmlxmltask удалить не работает

<?xml version="1.0" encoding="UTF-8"?> 
<application id="Application_1326308152661" version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"> 
    <description>MIC Server Application.</description> 
    <module> 
     <web> ...   
     </web> 
    </module> 
    <module> 
     <ejb>mic-sqlbridge.jar</ejb> 
    </module> 
    <security-role> ... 
    </security-role> 
</application> 

В этом XML-часть «модуль» тег, содержащий тег EJB должен быть удален. Для этого я попытался

<xmltask source="application.xml" dest="application_X.xml"> 
    <remove path="/application/module[ejb/text() = 'mic-sqlbridge.jar']"/> 
</xmltask> 

К сожалению, это ничего не удалить - вот журнал часть:

[xmltask] Reading application.xml 
[xmltask] Executing xmltask 1.16 
[xmltask] Processing application.xml into application_X.xml 
[xmltask] Using predefined xml catalog 
[xmltask] Applying RemovalAction() to /application/module[ejb/text() = 'mic-sqlbridge.jar'] 
[xmltask] Applied RemovalAction() - 0 match(es) 
[xmltask] RemovalAction() (/application/module[ejb/text() = 'mic-sqlbridge.jar']) failed to match 
[xmltask] Normalizing resultant document 

Любая идея? Заранее спасибо!

Франк

+0

Ваше выражение пути не выбирает элемент модуля, который вы хотите. Вы должны попытаться убедиться, что у вас есть правильное выражение. –

+0

Пробел - это пространство имен ... Использование/* [local-name() = 'application'] вместо/application позволило мне удалить узел/приложение/модуль/ejb - но, кажется, сложнее удалить полный тег 'module', который содержит этот тег ejb. –

ответ

4

Чтение this принес мне решение: «Обзорное имя каждого элемента XML с предшествующим„:“. Достаточно сказать, механизм XPath, что вы заинтересованы в локальное имя элемента»

Так что утверждение путь

path="/application/module[ejb/text() = 'mic-sqlbridge.jar']" 

становится

path="/:application/:module[:ejb/text() = 'mic-sqlbridge.jar']" 

что работало отлично.