Entfernen von leeren tags aus XML via XSLT

Hatte ich eine xml von dem folgenden Muster

<?xml version="1.0" encoding="UTF-8"?>
    <Person>
      <FirstName>Ahmed</FirstName>
      <MiddleName/>
      <LastName>Aboulnaga</LastName>
      <CompanyInfo>
        <CompanyName>IPN Web</CompanyName>
        <Title/>
    <Role></Role>
        <Department>
    </Department>
      </CompanyInfo>
    </Person>

Ich verwendet die folgenden xslt (aus Foren) in meinem Versuch, Sie zu entfernen, leere tags

 <xsl:template match="@*|node()">
<xsl:if test=". != '' or ./@* != ''">
  <xsl:copy>
  <xsl:copy-of select = "@*"/>
    <xsl:apply-templates />
  </xsl:copy>
</xsl:if>

Die xslt verwendet, ist erfolgreich bei der Beseitigung von tags wie

<Title/>
    <Role></Role>

...aber schlägt fehl, wenn leere tags sind auf zwei Zeilen, zB:

<Department>
    </Department>

Gibt es eine Lösung für dieses?

Gute Frage, +1. Siehe meine Antwort für eine komplette, kurze und einfache Lösung, die keine bedingten Anweisungen oder explizite Prioritäten und basiert auf den grundlegenden und leistungsstarken XSLT Entwurfsmuster -- Außerkraftsetzen der Identität herrschen.
Seien Sie vorsichtig mit deiner Ausdrucksweise. Ihre department element ist nicht leer, weil whitespace signifikant ist in XML-Elemente. Man kann sagen, es enthält nur Leerzeichen, aber man kann nicht sagen, dass es leer ist.
+1 für die Frage und Mühe. Siehe meine Antwort zu wissen über die XPath-1.0-Funktion erforderlich ist, um zum erwünschten Ergebnis, und wie geht das mit nur einem einzigen template.
Die Lösungen, die dort unten Ihren Anforderungen entsprechen. Ich Frage mich, warum Sie noch nicht angenommen/gewählt werden.

InformationsquelleAutor Nikkie | 2011-07-11

Schreibe einen Kommentar