2016-07-12 9 views
-1

Ich scheine auf die richtige Form von Xsl-Wert zu bekommen stecken bleiben. Ich habe den folgenden XML-INPUT:XSL bekomme Werte von Eingabe XML

<root> 
<output> 
    <tagQ> 
     <tag name="X"> 
      <parameters> 
       <parameter name="id">83683</parameter> 
      </parameters> 
      <tagE/> 
      <tagR> 
       <R id="1"> 
        <column name="A">83683</column> 
        <column name="B">7260</column> 
        <column name="C">10</column> 
        <column name="D">2500</column> 
       </R> 
      </tagR> 
     </tag> 
    </tagQ> 
</output> 

und die gewünschte Ausgabe ist:

<newRoot> 
<output> 
    <tagQ> 
     <tag name="another"> 
      <parameters> 
       <parameter name="A">83683</parameter> 
       <parameter name="B">7260</parameter> 
       <parameter name="C">10</parameter> 
       <parameter name="D">2500</parameter> *//value of columns from input//* 
      </parameters> 
     </tag> 
    </tagQ> 
</output> 
</newRoot> 

Vielen Dank für Ihre Hilfe. Ich habe die Frage mit der aktuellen XSL aktualisiert, die ich habe. Ausgang ist gut, aber ich kann nicht scheinen, um herauszufinden, wie die tatsächlichen Werte

bearbeiten erhalten: Aktuelle XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="*"> 
    <newRoot> 
     <output> 
      <tagQ> 
       <tag name="another"> 
        <parameters> 
         <parameter name="A"> 
          <xsl:value-of select="@*[@A]"/> 
         </parameter> 
         <parameter name="B"> 
          <xsl:value-of select="@*[@A]"/> 
         </parameter> 
         <parameter name="C"> 
          <xsl:value-of select="@*[@A]"/> 
         </parameter> 
         <parameter name="D"> 
          <xsl:value-of select="@*[@A]"/> 
         </parameter> 
        </parameters> 
       </tag> 
      </tagQ> 
     </output> 
    </newRoot> 
</xsl:template> 

+0

** 1 ** Wo genau Bist du damit festgefahren? ** 2. ** Woher kam der Wert von "0000"? –

+0

Zeigen Sie uns, was Sie bisher versucht haben, und die falsche Ausgabe, die es produziert. –

+0

Korrigiert mit dem Wertschild name = "another". – user3529643

Antwort

0

Ihr Ansatz nicht funktioniert, weil

<xsl:value-of select="@*[@A]"/> 

wählt nichts aus. Sie befinden sich im Kontext des Elements root - und Ihr Ausdruck versucht, ein beliebiges Attribut (des aktuellen Knotens) auszuwählen, das ein untergeordnetes Attribut mit dem Namen A hat. Natürlich kann kein solches Tier existieren.

Sie würden mehr Erfolg mit hatte:

<xsl:value-of select=".//column[@name='A']"/> 

, die ein Nachkomme Element column dessen name Attribut "A" ist benannt auswählt.

Aber ich würde vorschlagen, dass Sie einen anderen Ansatz versuchen - einen, die XSLT der rekursiven Verarbeitungsmodell zu tun, das schwere Heben läßt.

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/root"> 
    <newRoot> 
     <xsl:apply-templates/> 
    </newRoot> 
</xsl:template> 

<xsl:template match="tag[@name='X']"> 
    <tag name="another"> 
     <parameters> 
      <xsl:apply-templates select="tagR/R/column"/> 
     </parameters> 
    </tag> 
</xsl:template> 

<xsl:template match="column"> 
    <parameter> 
     <xsl:apply-templates select="@*|node()"/> 
    </parameter> 
</xsl:template> 

</xsl:stylesheet> 
+0

danke, du hast recht! eine weitere Frage..wenn ich die Ausgabe des Attributnamens ändern wollte 83683 und ich wollte stattdessen name = "was auch immer", wie würdest du mit der Template-Übereinstimmung gehen? gleiche Werte, nur ein anderer Name für die Bezeichnung "name" – user3529643

+0

Ich fürchte du hast mich verwirrt: Wenn du 'name =" was auch immer "haben willst' 'würde das den ** Wert ** des' name' Attributes ändern. Aber dann sagst du "* nur einen anderen ** Namen ** für den Titel" Name "*"; das würde 'was auch immer =" A "ergeben. –

+0

"Wenn Sie name =" was auch immer "haben möchten, der den Wert des Namensattributs ändern würde - das ist richtig. Der Wert des Namensattributs, den ich meinte. leider – user3529643