xsl-list
[Top] [All Lists]

RE: copy single node once from one location to another

2002-09-09 01:23:21
<xsl:variable name="data-nr" select="/mydoc/specials/data_nr"/>

<xsl:template match="a">
  <a>
  <xsl:copy-of select="@*"/>
  <xsl:copy-of select="node()"/>
  <xsl:if test="count(preceding-sibling::a)+1 = $data-text">
    <xsl:copy-of select="$data_nr/../data-text"/>
  </xsl:if>
</xsl:template>

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Thomas Olausson
Sent: 06 September 2002 22:46
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] copy single node once from one location to another


My XML file is being fed to an external system, which I don't 
have control of. 
It adds a "specials"-tag at the end like this: (hardcoded)

<mydoc>
      <a id="ABC">
              <data>100</data>
              <data>101</data>
      </a>
      <a id="DEF">
              <data>200</data>
              <data>201</data>
      </a>
      <specials>
              <data_nr>2</data_nr>
              <data_text>300</data_text>
      </specials>
</mydoc>

I'd like to write a XSLT that moves the data_text to the 
corresponding index of "a", expressed in data_nr. In the 
above case, /mydoc/a[2]

In the above example, I'd like the output to be

<mydoc>
      <a id="ABC">
              <data>100</data>
              <data>101</data>
      </a>
      <a id="DEF">
              <data>200</data>
              <data>201</data>
              <data>300</data>
      </a>
      <specials>
              <data_nr>2</data_nr>
              <data_text>300</data_text>
      </specials>
</mydoc>
I just copied the 300-data to the 2nd 'a', because data_nr was 2.

I know which fields to copy from, and I don't need any error 
checking (in case there are only one a , but data_nr=2 would 
never happen)

I can't change the external system, and in XSLT, I haven't 
figured out to copy the line once. My XSLTs copies them one 
for every data item, even if I match correctly.

/Thomas


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>