2017-03-07 2 views
1

개미 스크립트를 사용하여 프로그래밍 방식으로 XML 청크를 제거하고 싶습니다. 멋진 xmltask 작업을 찾았지만 나를 살기 위해 삭제하려는 resource-ref 노드를 찾을 수 없습니다.Ant 스크립트에서 resource-ref XML 태그 찾기

내 XML 문서가 어떻게 생겼는지에 대한 하위 섹션이 있습니다. 나는이 같은 두 번째 resource-ref 덩어리를 제거하기 위해 노력하고있어

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="WebApp_ID" 
    version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name>Foo</display-name> 

    <resource-ref> 
    <description>Something Clever</description> 
    <res-ref-name>jdbc/foo1</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 

    <resource-ref> 
    <description>Reports Database</description> 
    <res-ref-name>jdbc/foo2</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 

</web-app> 

:

<project name="test" basedir="." default="fixxml"> 
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> 
    <target name="fixxml" description="er doy"> 
    <xmltask source="web.xml" dest="output.xml"> 
     <remove path="/web-app/resource-ref/description[text()='Reports Database']" /> 
    </xmltask> 
    </target> 
</project> 

그러나, 그것은 작동하지 않습니다 그것은 표준 DTD를 사용하는 web.xml 파일입니다. 또한 다음 remove 진술을 시도했습니다.

<remove path="/web-app/resource-ref[2]" /> 
.... 
<remove path="//description[text()[normalize-space(.)='Reports Database']]"" />  

아무도 작동하지 않았습니다. 아무도 내가 내 쿼리에 잘못을 저지르고있는 것을 볼 수 있습니까?

+0

확인 http://stackoverflow.com/questions/10096332/replacing-an-entire-xml-tag-using-ant – Maverick

+0

제안 해 주셔서 감사합니다.하지만이 옵션도 나에게 적합하지 않습니다. –

답변

0

파트리스의 대답은 가장 문제를 설명하는 것 같다. Xpath가 내 네임 스페이스를 무시하는 것 같습니다. 그러므로 나는이 지식과 ​​다양한 xpath 헬퍼를 사용하여 "쿼리 문자열"을 자바로 작성하여 보았습니다. 꽤 많은 시간이 지나면 마침내이 길을 포기했습니다.

  1. 는 XML 덩어리를 제거하는 쉘 스크립트를 작성 :

    나는 다음을 수행하여이 문제를 해결 끝났다.
  2. 내 Ant 파일에서 해당 스크립트를 호출합니다.

나에게있어서 옵션 A 또는 B가 아닙니다. 옵션 M과 비슷합니다. 그러나 Xpath의 모든 사마귀와 인기있는 Java에서 구현되는 방법을 배울 여유가 없습니다. 라이브러리.

1

web.xml이 네임 스페이스를 선언하지만 xpath가이 문제를 무시할 가능성이 큽니다. 참조 : https://stackoverflow.com/a/35778167/366749

다른 문제는 잠재적으로 xpath 표현식이 '설명'요소를 부모가 아닌 삭제할 노드로 지정한다는 것입니다.

하기 권장 편집 (안된) :

<remove path="path="/*[local-name()='web-app']/*[local-name()='resource-ref'][2]"/> 
+0

제안 해 주셔서 감사합니다. 그러나 이것은 저에게 효과적이지 않았습니다. 나는 또한 약간 변이를 시도하지 않았다. –

+0

어떻게 작동하지 않는지 구체적으로 설명해 주시겠습니까? 어쩌면 우리는 그것을 고칠 수 있고 다른 사람들을 도울 수있는 업데이트를 제공 할 수 있습니다. –

+0

죄송하지만 아직 작동하지 않는 예가 없습니다. 문제는 내가 시도한 모든 것이 제대로 작동하지 않는다는 것이고 그것이 작동하는 것이 얼마나 가깝습니까? 그러므로 나는 그들을 구원하는 것을 괴롭히지 않았다. 이클립스에서 두 xpath 헬퍼를 포함하여 이것을 파악하는 데 도움이되는 여러 도구를 사용했다는 점에 유의하십시오. –