xsl-list
[Top] [All Lists]

RE: replacing values in file1 from file2

2004-03-25 05:24:39
Hi,

<file1>
  <terms>
    <source lang="english">
      <term>dog</term>
    </source>
    <source lang="danish">
      <term>dog</term>
    </source>
  </terms>
  <terms>
    <source lang="english">
      <term>dog</term>
    </source>
    <source lang="danish">
      <term>dog</term>
    </source>
  </terms>
</file1>

<file2>
  <tranlated>
    <term lang="danish">hund</term>
    <term lang="danish">bord</term>
  </translated>
</file2>

I've tried matching a nodeset in file1 using <..  
match="//source[(_at_)lang='danish']/term"> seems fine. Then I've tried to 

With match patterns the leading // is not needed, just use

  <xsl:template match="source[(_at_)lang='danish']/term">

copy-of the value from select="document('file2.xml')//term/text()" in 
various ways. I get the first value only from the list 
copied, but in all 
the locations I wanted. How do I pass on the number of the 
node in the first 
nodeset to the nodeset selected from the second file. I tried 
setting up a 
variable using position() but couldn't get it to work.

If you've simplified your source, then I suppose you can't change the source to 
use proper keys, instead of relying on the position for a match. First you want 
to know your position in file1

    <xsl:variable name="position" 
select="count(../../preceding-sibling::terms)"/>

Then get the translated term

    <xsl:value-of 
select="document('file2.xml')//term[count(preceding-sibling::term) = 
$position]"/>

For performance you want to replace the // walking with file2/translated, and 
also you might want to consider using keys: just use the preceding term sibling 
count as the key.

Cheers,

Jarno - Melotron: Manchmal


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