2016-06-15 11 views
0

Aus diesem Beispiel XML:Ersetzen Wert aller Attribute XML durch Eingabe von Text mithilfe von XSLT XML beibehalten identation

<?**xml** version='*1.0*' encoding='*UTF-8*' ?> 
<**config**> 
    <**Connections**> 
    <**DbMetaData** tablePrefix="*example.*"/> 
    <**AGSConnection** 
        outputDirectory="*C:\directory2\directories\isoutput*"     virtualOutputDirectory="*https://directory1.example1.net/ex/rest/output*"/> 
    <**SDEConnection** 
        server="*srv01*" 
        instance="*sde:sqlserver:srv01*" 
        database="*DBex*" 
        authenticationMode="*DBMS*" 
        user="*user1*" 
        password="*pass123*" 
        version="*sde.DEFAULT*" 
        sdeConnectionPath="*C:\\tmp\\ex\\conexion\\ser01.sde*"/> 
</**Connections**> 
</**config**> 

und XSLT verwenden, ersetzen Sie alle Werte von editierbaren Textfeldern Attribut, die Aufrechterhaltung der Vertiefung (XML-Struktur). Wie könnte ich so etwas wie dies ?:

final result in browser

Dank,

+1

** 1. ** Bitte das erwartete Ergebnis ** als Code **. - ** 2. ** Was bedeuten alle Sternchen in deiner Eingabe? –

+1

Hier, was Sie gemeint haben sagen für "editierbare Textfelder" in der XML-Ausgabe Ergebnis – nawazlj

+0

Mit "Einrückung beibehalten", meinen Sie auch alle zusätzlichen Leerzeichen zwischen z. 'outputDirectory' und' virtualOutputDirectory'? Aus der XML-Perspektive sind sie irrelevant und xslt-Prozessoren werden sie entfernen - aber nichts anderes als xml-aware-Anwendungen zu verwenden, ist keine _good_-Lösung –

Antwort

0

Lassen Sie mich versuchen zu erraten, was Sie meinen: Sie wollen einfach nur die Attributwerte mit „some input“ ersetzen. In xslt können Sie "einige Eingaben" entweder durch ein separates xml-Dokument übergeben, das Sie mit der Funktion document() gelesen haben, oder Sie können Parameter verwenden, um Werte in das Stylesheet zu übertragen: (modifizierte Identitätstransformation mit zusätzlichen Vorlagen für die zu ersetzenden Attribute)

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:param name="tablePrefix" select="''"/> 
<xsl:param name="outputDirectory" select="''"/> 
<xsl:param name="virtualOutputDirectory" select="''"/> 
<xsl:param name="server" select="''"/> 
<xsl:param name="instance" select="''"/> 
<xsl:param name="database" select="''"/> 
<xsl:param name="authenticationMode" select="''"/> 
<xsl:param name="user" select="''"/> 
<xsl:param name="password" select="''"/> 
<xsl:param name="version" select="''"/> 
<xsl:param name="sdeConnectionPath"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="@tablePrefix"> 
     <xsl:choose> 
      <xsl:when test="$tablePrefix != ''"> 
       <xsl:attribute name="tablePrefix"> 
        <xsl:value-of select="$tablePrefix"/> 
       </xsl:attribute> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:copy-of select="."/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
    <!-- repeat for each of the attributes replacing all "tablePrefix" by the attribute --> 

</xsl:stylesheet> 

Wie Sie die Parameter übergeben, hängt von Ihrem xslt-Prozessor ab, z --stringparam name value mit xsltproc oder -param name value mit xalanj.

0

Der XML-Parser teilt dem XSLT-Prozessor nicht mit, wie viel Leerraum zwischen den Attributen vorhanden ist. Sobald die Daten in XSLT sind, gehen diese Informationen verloren. Sie können den XSLT-Prozessor veranlassen, seine eigene Einrückung der Ausgabe unter Verwendung von <xsl:output indent='yes'/> vorzunehmen, aber es muss nicht unbedingt mit dem Original identisch sein. (Für was es sich lohnt, der Einzug in Ihrer Eingabe, wenn wir die seltsamen Sternchen ignorieren, sieht aus, als ob es mit Saxon hergestellt wurde.)

Verwandte Themen