XSLT向element添加增量id属性

时间:2014-11-17 11:22:22

标签: xslt

使用XSLT我需要将增量ID号添加到我的输出中的每个反馈元素,从1开始。某些段对可能有多个反馈元素,但ID号应始终加1。

期望的输出:

 <?xml version="1.0" encoding="UTF-8"?>
    <document>
        <feedback id="1">...</feedback>
        <source>...</source>
        <target>...</target>
        <feedback id="2">...</feedback>
        <source>...</source>
        <target>.../target>
    <!-- if mulltiple feedback elements exist in a segment pair -->
        <feedback id="3">...</feedback>
        <feedback id="4">...</feedback>
        <source>...</source>
        <target>.../target>

    </document>

XSLT:

<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="/">

    <document>
        <xsl:for-each select="files/file/segmentpair[Comments/Comment]">
            <xsl:apply-templates select="Comments/Comment"/>
            <xsl:copy-of select="source|target"/>

        </xsl:for-each>
    </document>     
</xsl:template>
<xsl:template match="Comment">
    <feedback>
     <xsl:attribute name="id">     
     <xsl:number/> </xsl:attribute>
     <xsl:value-of select="."/>
    </feedback>
</xsl:template> 
</xsl:stylesheet>

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<files>
  <file originalfilename="C:\Projects\RIA_13049\de-DE\RIA_13049_FPO_AMP-Elitenetzwerk_Master.JULI2013.rtf">
<segmentpair id="46" locked="False" color="255,255,255" match-value="0">
      <source>2. als Vertreter der Universität Bayreuth ein Professor der Materialwissenschaft oder der Engineering Science und</source>
      <target>2. as a representative of the University of Bayreuth, a professor of materials science or engineering science</target>
      <Comments>
        <Comment>[slep10 09.01.2014 15:09:23] why no caps here but in segment above?</Comment>
      </Comments>
    </segmentpair>
    <segmentpair id="47" locked="False" color="255,255,255" match-value="0">
      <source>3. als Vertreter der Universität Würzburg ein Professor der Nanostrukturtechnik.</source>
      <target>3. as a representative of the University of Würzburg, a professor of nanostructure technology</target>
    </segmentpair>
    <segmentpair id="48" locked="False" color="255,255,255" match-value="0">
      <source>(2) Die Mitglieder werden vom Fachbereichsrat der jeweils zuständigen Fakultät auf drei Jahre bestellt; Wiederbestellung ist zulässig.</source>
      <target>(2) The members shall be appointed by the School Council for a term of office of three years; re-appointment shall be permitted.</target>
      <Comments>
        <Comment>[slep10 09.01.2014 15:10:09] problematic term since 'Schools' do not exist at TechFak</Comment>
      </Comments>
    </segmentpair>
    <segmentpair id="49" locked="False" color="255,255,255" match-value="0">
      <source>(3) Die Mitglieder der gemeinsamen Auswahlkommission wählen aus ihrer Mitte den Vorsitzenden und den Stellvertreter.</source>
      <target>(3) The members of the Joint Admissions Committee shall elect a member as chairperson and one as deputy.</target>
    </segmentpair>
    <segmentpair id="50" locked="False" color="255,255,255" match-value="0">
      <source>(4) Die gemeinsame Auswahlkommission entscheidet über die Aufnahme der Bewerber in den Studiengang in Abhängigkeit von der Anzahl der verfügbaren Plätze und gegebenenfalls über ein Ausscheiden.</source>
      <target>(4) The Joint Admissions Committee shall make the decision on the admission of applicants to the degree programme dependent on the available places.  </target>
    </segmentpair>
</file>
</files>

当前输出:

  <?xml version="1.0" encoding="UTF-8"?>
    <document>
        <feedback id="1">[slep10 09.01.2014 15:09:23] why no caps here but in segment above?</feedback>
        <source>2. als Vertreter der Universität Bayreuth ein Professor der Materialwissenschaft oder der Engineering Science und</source>
        <target>2. as a representative of the University of Bayreuth, a professor of materials science or engineering science</target>
        <feedback id="1">[slep10 09.01.2014 15:10:09] problematic term since 'Schools' do not exist at TechFak</feedback>
        <source>(2) Die Mitglieder werden vom Fachbereichsrat der jeweils zuständigen Fakultät auf drei Jahre bestellt; Wiederbestellung ist zulässig.</source>
        <target>(2) The members shall be appointed by the School Council for a term of office of three years; re-appointment shall be permitted.</target>
    </document>

1 个答案:

答案 0 :(得分:1)

试试这个:

<xsl:template match="Comment">
<feedback>
 <xsl:attribute name="id">     
    <xsl:value-of select="count(preceding::Comments)+1"/>
 </xsl:attribute>
 <xsl:value-of select="."/>
</feedback>