Remova tags e conteúdos com base na tag filha e adicione um novo conteúdo - Shmlcript xml

1

Alguém por favor pode me culpar disso? Eu estou tentando localizar uma tag específica, com base no conteúdo da criança e remover a tag pai e conteúdo e adicionar um novo conteúdo, mas não consigo encontrar uma resposta. Aqui está o meu xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<app>
<displayname>Admin</displayname>
<filter>
 <filtername>accesslog</filtername>
 <filterclass>com.filter.accesslog</filterclass>
</filter>
<filter>
  <filtername>ServerHealthCheckFilter</filtername>
  <filterclass>com.filter.ServerHealthCheckFilter</filterclass>
</filter>
</app>

O que eu quero fazer é pesquisar <filtername>accesslog</filtername> existe em um bloco <filter> , se eu quiser excluir todo o bloco <filter> que o <filtername>accesslog</filtername> em seu pai e adicionar um novo conteúdo. Então o resultado seria:

<displayname>Admin</displayname>
<filter>
 <filtername>accesslog</filtername>
 <filterclass>com.logclient.filter.accesslog</filterclass>
 <initparam>
   <param-name>logClientName</param-name>
   <param-value>com.logging.AccessLogImpl</param-value>
  </initparam>
</filter>
<filter>
  <filtername>ServerHealthCheckFilter</filtername>
  <filterclass>com.filter.ServerHealthCheckFilter</filterclass>
</filter>

Estou apenas tentando meu primeiro xsl para excluir o conteúdo primeiro. Aqui está:

modifyxml.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
  method = "xml" 
  version = "1.0" 
  encoding = "ISO-8859-1"
  omit-xml-declaration = "yes"
  doctype-public = "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"
  indent = "yes"/>
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
  <xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="filter[filter-name = 'accesslog']"/>
</xsl:stylesheet>

Eu recebo erros.

modifyxml.xsl:8: parser error : error parsing attribute name
"http://java.sun.com/dtd/web-app_2_3.dtd"
^
modifyxml.xsl:8: parser error : attributes construct error
"http://java.sun.com/dtd/web-app_2_3.dtd"
^
modifyxml.xsl:8: parser error : Couldn't find end of Start Tag output line 2
"http://java.sun.com/dtd/web-app_2_3.dtd"
^
    
por Thiripu 04.11.2015 / 07:42

1 resposta

2

Você não deve tentar analisar XML com um script de shell. Procure uma ferramenta criada como xsltproc .

    
por 04.11.2015 / 10:11