nralt: Tag-Name ändern

Hallo,

ich möchte mit XLS Tag-Namen in einer XML-Datei ändern

Beispiel:

ist:
     <root>
       <page1>
         <pos1>text</pos1>
         <pos2>text</pos2>
         <pos3>text</pos3>
         <pos4>text</pos4>
       </page1>
     </root>

soll:
     <root>
       <page1>
         <c1>text</c1>
         <c2>text</c2>
         <c3>text</c3>
         <c4>text</c4>
       </page1>
     </root>

nun könnte ich im XLS für jeden Tag einen Eintrag vornehmen:

<xsl:template match="pos1">
<c1>
xsl:apply-templates/
</c1>

Kennt jemand einen einfacheren Weg, um nur "pos" zu ändern

  1. Hallo,
    wenn du:

    <root>
           <page1>
             <pos1>text</pos1>
             <pos2>text</pos2>
             <pos3>text</pos3>
             <pos4>text</pos4>
           </page1>
         </root>

    in:

    <root>
           <page1>
             <c1>text</c1>
             <c2>text</c2>
             <c3>text</c3>
             <c4>text</c4>
           </page1>
         </root>

    umwandelst, was ist dann gewonnen? Wie soll:

    <xsl:template match="pos1">

    dann überhaupt eine pos finden? Die sind doch weg?

    Und wo kommt das xml denn her? Eventuell hilft ein Suchen und Ersetzen mit dem Texteditor?

    Reine Spekulation, aber vielleicht geht's in die richtige Richtung:

        <root>  
            <page1>  
             <c pos="1">text</c1>  
             <c pos="2">text</c2>  
             <c pos="3">text</c3>  
             <c pos="4">text</c4>  
           </page1>  
         </root>
    

    LG, Patty

  2. Hallo nralt,

    Kennt jemand einen einfacheren Weg, um nur "pos" zu ändern

    Identitäts-Template mit Spezialbehandlung der pos*-Elemente:

    <?xml version="1.0" encoding="UTF-8"?>  
    <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="*[starts-with(local-name(),'pos')]">  
        <xsl:element name="c{substring-after(local-name(),'pos')}">  
          <xsl:apply-templates select="@* | node()"/>  
        </xsl:element>  
      </xsl:template>  
      
    </xsl:stylesheet>
    

    Ergebnis:

    <?xml version="1.0" encoding="UTF-8"?>  
    <root>  
      <page1>  
        <c1>text</c1>  
        <c2>text</c2>  
        <c3>text</c3>  
        <c4>text</c4>  
      </page1>  
    </root>
    

    Grüße,
    Thomas

    1. Vielen Dank für den Tipp, werde ihn gleich mal ausprobieren