xsl将属性转换为元素

时间:2017-05-10 19:37:46

标签: xml xslt

我只想要以下输出。这是xml代码,也是输出。所以我只想要我给出的相同输出。

输出:

<?xml version="1.0" encoding="UTF-8" ?>
<acta>
   <sessió>68</sessió>
   <data>2016-11-21</data>
   <inici>20:00:00</inici>
   <durada>pT3H45M</durada>
   <comunitat> Junta de propietaris del Carrer de la Selva de Mar, 211 </comunitat>
   <president>Sr. Lluís Bendito i Sigüenza</president>
   <vicepresident>Sra. Ramona González Remolona</vicepresident>
   <administrador>Sr. Romualdo Malandrín Segura</administrador>
</acta>

XML

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="actaampliada.css" ?>
<!-- Aquest document ha estat generat amb el prodigiós programa ManualTypemàtic v0.1 -->
<acta sessió="68" data="2016-11-21" inici="20:00:00" durada="pT3H45M" >
    <comunitat> Junta de propietaris del Carrer de la Selva de Mar, 211 </comunita                                                                                      t>
    <president>Sr. Lluís Bendito i Sigüenza</president>
    <vicepresident>Sra. Ramona González Remolona</vicepresident>
    <administrador>Sr. Romualdo Malandrín Segura</administrador>
    <assistents>
        <assistent>
            <pis>1er 1ra</pis>
            <veí>Sra. Josefa Ramos Granados</veí>
            <veí>Sra. Jamilda Altramuz Izaguirre</veí>
        </assistent>
        <assistent>
            <pis>1er 2na</pis>
            <veí>Sr. Vicent Carallot i Gripau</veí>
        </assistent>
        <assistent>
            <pis>2on 1ra</pis>
            <veí rol="president">Sr. Lluís Benito i Sigüenza</veí>
        </assistent>
        <assistent>
            <pis>2on 2na</pis>
            <veí>Sr. Carles Valdaura Ronyós</veí>
            <veí rol="vicepresident">Sra. Ramona González Remolona</veí>
            <veí>Sta. Ramona Valdaura González</veí>
        </assistent>
        <assistent>
            <pis>4rt 1ra</pis>
            <veí>Sr. Lam Kam Chuen</veí>
        </assistent>
    </assistents>
    <noassistents>
        <pis>3er 2na</pis>
        <pis>3er 1ra</pis>
        <pis>4rt 2na</pis>
    </noassistents>
    <ordredeldia>
        <punt id="1">Lectura i aprovació, si escau, de l'acta anterior</punt>
        <punt id="2">Estat de pagament de les quotes del propietari del pis 4rt 2n                                                                                      a.</punt>
        <punt id="3">Torn obert de paraula</punt>
        <punt id="4">Horari de reg i utilització dels espais comuns per part del p                                                                                      ropietari del pis 4rt 2na.</punt>
    </ordredeldia>
    <desenvolupament>
        <entrada punt="1">
            <paragraf>La sra. vicepresidenta llegeix l’acta de la reunió.</paragra                                                                                      f>
        </entrada>
        <entrada punt="2">
            <paragraf>El sr. president passa la paraula al Sr. administrador qui d                                                                                      escriu que el pis 4rt 2na no està al corrent de pagament de les quotes de la comun                                                                                      itat. Indica que el propietari en qüestió va deixar de pagar fa cinc mesos i deu a                                                                                       la comunitat 376.25€.</paragraf>
            <paragraf>El sr. Vicent Carallot exposa els problemes que està tenint                                                                                       amb el reg de les plantes a qualsevol hora i de manera desproporcionada, per part                                                                                       del propietari del pis en qüestió i també que deixa una pudor inaguantable a la po                                                                                      rteria quan baixa les escombreries. Altres veïns s’hi afegeixen a la discussió.</p                                                                                      aragraf>
            <paragraf>El sr. Chin Pun indica que l’ascensor no arriba al seu pis o                                                                                       bé que s’ha comprat un gos verd (cap de la junta ni el Sr. administrador vam pode                                                                                      r esverinar-ho exàctament). En tot cas, se li indica que aquest tema havia de ser                                                                                       tractat al torn obert de paraula.</paragraf>
        </entrada>
        <entrada punt="4">
            <paragraf>Queda tractat amb el punt 2.</paragraf>
        </entrada>
        <entrada punt="3">
            <paragraf>No queda temps per desenvolupar aquest punt. El sr. Cho Chin                                                                                       protesta i la junta acorda oferir-li una oportunitat per a exposar el seu tema en                                                                                       una reunió propera.</paragraf>
        </entrada>
    </desenvolupament>
    <acords>
      <acord id="1">S'acorda abordar el tema del Sr. Chin Pun en la propera reunió                                                                                      </acord>
    </acords>
    <temespendents>
      <tema id="1"> Estudi del problema del veí del 4rt 1ra </tema>
    </temespendents>
</acta>

我试过这个XSL:

<?xml version="1.0"?>
<!-- Demostració de conversió d'atributs a elements -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" />

    <xsl:strip-space elements="*" />

    <xsl:template match="acta">
        <xsl:copy>
            <xsl:apply-templates select="@*|*|text()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="acta/@*">
        <xsl:element name="{name()}">
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="text()" />

</xsl:stylesheet>

但问题是我只获得元素中的属性,我还想要<acta><comunitat> <president> <vicepresident> <administrador>中的后续标记,因为你可以在输出中看到。我不想要更多的标签,没有别的。提前谢谢!

2 个答案:

答案 0 :(得分:1)

你的尝试非常接近。但是,我要做的是从identity transform开始并覆盖所需的内容......

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

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

  <!--Convert attributes of acta to elements.-->
  <xsl:template match="acta/@*">
    <xsl:element name="{name()}">
      <xsl:value-of select="."/>
    </xsl:element>
  </xsl:template>

  <!--Remove children of acta when they also contain child elements.-->
  <xsl:template match="acta/*[*]"/>

</xsl:stylesheet>

注意:我假设应删除任何包含子元素的acta子项。如果这不是一个安全的假设,请告诉我如果需要我可以更新样式表。

答案 1 :(得分:0)

  

但问题是我只获得元素中的属性,我也是   想要<acta><comunitat> <president> <vicepresident> <administrador>中的后续标签,因为你可以在输出中看到。和我   不需要更多标签,没有别的。

如果你确切知道你想要哪些元素,为什么不明确列出它们 - 例如:

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

<xsl:template match="/acta">
    <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:copy-of select="comunitat | president | vicepresident | administrador"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@*">
    <xsl:element name="{name()}">
        <xsl:value-of select="."/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>