2013-12-17 221 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允许我删除节点/ application/module/ejb - 但它似乎更难以删除包含此ejb标签的完整标签“模块”。 –

回答

4

阅读this给我带来了解决方案:“作用域每个XML元素名称与前面的‘:’就足以告诉XPath的机制,你感兴趣的元素的本地名称”

所以路径语句

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

成为

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

什么完美。