로컬 개발을 위해 특수 web.xml을 만들려고합니다.특정 위치에있는 소스 파일에서 대상 파일로 태그를 복사하여 ant xmltask를 사용하여 XML 파일을 확장하는 방법
일부 XML 태그가 선택되어 최종 web.xml의 특정 위치에 붙여 넣어 져야합니다.
<xmltask source="templates.xml">
<copy path="//data/init-param" buffer="initParamBuffer"/>
</xmltask>
<xmltask source="web.xml" dest="web.xml">
<paste path="//web-app/filter[contains(./filter-name,'MyFilter')]
/init-param[contains(./param-name,
'MyInitParameter')]"
position="after" buffer="initParamBuffer"/>
</xmltask>
내 의도는 소스 파일에서 모든 INIT-PARAM 태그를 수집하고 태그에서 선택한 후 붙여 넣기하는 것입니다
내가 복사하고 다음과 같은 방식으로 붙여 넣기 작업을 사용하고이를 달성하기 위해 붙여 넣기 작업.또한 contains() 함수를 사용하여 지정된 내용의 태그가 포함 된 태그를 선택하는 부분도 원활하게 작동하지 않습니다.
아마 ...이 XPath 식을 형성하는 더 나은 방법이
갱신 :
내가 전에 쓴 것처럼, 나는이 문제에 대한 최선의 방법을 모른다. 스타일 시트를 사용하여 변환 할 수있는 가능성에 대해 읽었지만, ant-xmltask가 더 느슨한 해결책으로 약속 했으므로 먼저 이것을 시도했습니다.
이 접근법을 사용하는 한,이 접근 방식을 사용하여 web.xml에 태그를 삽입/작성하는 것이 가능합니다. 나는 위치에 하나의 INIT-PARAM 태그를 삽입에 성공 곳 sligtly 오프, 덜 복잡한 표정이 :
<paste path="//web-app/filter[1]/init-param"
position="after" buffer="initParamBuffer"/>
그래서 내 문제였다 A : 내가 버퍼 에 하나 개 이상의 태그를 선택합니다 B : 이름 (인덱스가 아님)으로 지정된 태그 다음에 버퍼의 내용을 삽입하려고합니다. 여기
는 web.xml에 삽입하는 소스의 일례 (templates.xml)이다 : 여기서<data>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</data>
위 섹션 접착되어야하는 web.xml의 일부이다
여기<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
</filter>
</web-app>
그리고 내가 달성하기 위해 희망 결과입니다
<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</filter>
</web-app>
자네 말이 맞아,하지만 내가 먼저 다른 sollution에 들어갑니다 , 빌드에 추가적인 스타일 시트에 의해 생성 된 과열로 인해 하나 또는 두 개의 추가적인 ant 지시문에 비해 ocess. 개미 xmltask 내 문제를 해결할 수없는 경우 반드시 xslt 접근 방식을 취할 것입니다. – elfwyn