Tag und Inhalt basierend auf dem untergeordneten Tag entfernen und neuen Inhalt hinzufügen – Shellscript XML

Tag und Inhalt basierend auf dem untergeordneten Tag entfernen und neuen Inhalt hinzufügen – Shellscript XML

Kann mir bitte jemand dabei helfen? Ich versuche, ein bestimmtes Tag zu finden, basierend auf dem Inhalt des untergeordneten Tags, das übergeordnete Tag und den Inhalt zu entfernen und einen neuen Inhalt hinzuzufügen, kann aber keine Antwort finden. Hier ist meine 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>

Ich möchte <filtername>accesslog</filtername>in einem Block nach vorhandenen Elementen suchen. Wenn dies der Fall ist, möchte ich den gesamten Block <filter>löschen , der sich im übergeordneten Element befindet, und einen neuen Inhalt hinzufügen. Das Ergebnis wäre also: <filter><filtername>accesslog</filtername>

<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>

Ich versuche gerade, mit meinem ersten XSL-Befehl zunächst den Inhalt zu löschen. Hier ist er:

XML-Datei ändern.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>

Ich bekomme Fehlermeldungen.

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"
^

Antwort1

Sie sollten nicht versuchen, XML mit einem Shell-Skript zu analysieren. Suchen Sie nach einem speziell dafür entwickelten Tool wie xsltproc.

verwandte Informationen