[英]XSLT transform to search and delete
The <P1>
tags appear under <web-app>
and under <servlet>
tags in the XML file. <P1>
标记出现在XML文件中的<web-app>
和<servlet>
标记下。 I want to search <servlet>
tag with <servlet-name>
as DUMMY and then delete <P1>
tags under it when its sub-tag <p1-name>
is equal to B2 OR B3. 我想用
<servlet-name>
作为DUMMY搜索<servlet>
标记,然后在其子标记<p1-name>
等于B2或B3时删除其下的<P1>
标记。 We DO NOT WANT TO ALTER THE <P1>
tags directly uder <web-app>
我们不想直接在
<web-app>
更改<P1>
标签
I have got familiar with identity template and searching but struggling to delete. 我已经熟悉身份模板和搜索,但是却很难删除。 Any solutions so that i can tackle similar problems in future?
任何解决方案,以便我将来可以解决类似的问题?
Input XML 输入XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true">
<P1>IGNORE1</P1>
<P1>IGNORE2</P1>
<servlet>
<servlet-name>TEST</servlet-name>
<servlet-class>com.mm.bb.servlet.TEST</servlet-class>
<P1>
<p1-name>A1</p1-name>
<p1-value>A11111</p1-value>
</P1>
<P1>
<p1-name>A2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>A3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A5</p1-name>
<p1-value/>
</P1>
<junk>1</junk>
</servlet>
<servlet>
<servlet-name>DUMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
<P1>
<p1-name>B1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>B2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>B3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>B4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>B5</p1-name>
<p1-value/>
</P1>
<junk>1333</junk>
</servlet>
<servlet>
<servlet-name>SAMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
<P1>
<p1-name>C1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>C2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>C3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C5</p1-name>
<p1-value/>
</P1>
<junk>12313</junk>
</servlet>
<D>
<D1>
<D11>admin</D11>
</D1>
<D2>
<D21>XX</D21>
</D2>
</D>
<E>
<E1>Yo</E1>
<E2>Hello</E2>
</E>
</web-app>
The O/P XML should look like this where <P1>
tag under <servlet>
with <servlet-name>
as DUMMY are removed because <p1-name>
was either B2 OR B3. O / P XML应该看起来像这样,其中由于
<p1-name>
是B2或B3,因此删除了<servlet>
具有<servlet-name>
为DUMMY的<P1>
标记。
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true">
<P1>IGNORE1</P1>
<P1>IGNORE2</P1>
<servlet>
<servlet-name>TEST</servlet-name>
<servlet-class>com.mm.bb.servlet.TEST</servlet-class>
<P1>
<p1-name>A1</p1-name>
<p1-value>A11111</p1-value>
</P1>
<P1>
<p1-name>A2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>A3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A5</p1-name>
<p1-value/>
</P1>
<junk>1</junk>
</servlet>
<servlet>
<servlet-name>DUMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
<P1>
<p1-name>B1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>B4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>B5</p1-name>
<p1-value/>
</P1>
<junk>1333</junk>
</servlet>
<servlet>
<servlet-name>SAMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
<P1>
<p1-name>C1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>C2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>C3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C5</p1-name>
<p1-value/>
</P1>
<junk>12313</junk>
</servlet>
<D>
<D1>
<D11>admin</D11>
</D1>
<D2>
<D21>XX</D21>
</D2>
</D>
<E>
<E1>Yo</E1>
<E2>Hello</E2>
</E>
</web-app>
Use the identity transformation and an empty template for the elements you want to remove: 对要删除的元素使用标识转换和空模板:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="servlet[servlet-name = 'DUMMY']/P1[p1-name = ('B2', 'B3')]"/>
At http://xsltransform.hikmatu.com/nbUY4ki I get the output 在http://xsltransform.hikmatu.com/nbUY4ki我得到了输出
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true">
<P1>IGNORE1</P1>
<P1>IGNORE2</P1>
<servlet>
<servlet-name>TEST</servlet-name>
<servlet-class>com.mm.bb.servlet.TEST</servlet-class>
<P1>
<p1-name>A1</p1-name>
<p1-value>A11111</p1-value>
</P1>
<P1>
<p1-name>A2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>A3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>A5</p1-name>
<p1-value/>
</P1>
<junk>1</junk>
</servlet>
<servlet>
<servlet-name>DUMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.DUMMY</servlet-class>
<P1>
<p1-name>B1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>B4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>B5</p1-name>
<p1-value/>
</P1>
<junk>1333</junk>
</servlet>
<servlet>
<servlet-name>SAMMY</servlet-name>
<servlet-class>com.mm.bb.servlet.SAMMY</servlet-class>
<P1>
<p1-name>C1</p1-name>
<p1-value>B11111</p1-value>
</P1>
<P1>
<p1-name>C2</p1-name>
<p1-value>A22222</p1-value>
</P1>
<P1>
<p1-name>C3</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C4</p1-name>
<p1-value/>
</P1>
<P1>
<p1-name>C5</p1-name>
<p1-value/>
</P1>
<junk>12313</junk>
</servlet>
<D>
<D1>
<D11>admin</D11>
</D1>
<D2>
<D21>XX</D21>
</D2>
</D>
<E>
<E1>Yo</E1>
<E2>Hello</E2>
</E>
</web-app>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.