Maybe this is not the right place to ask general XML-XSLT-XPATH questions.
Any pointers to a better place would be appreciated.
In the mean time:
In may way to merging two xml files using XSLT, I decided to use one XML
file containing the names of the files to be merged:
------------------------ BEGIN -------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="catalog/xslt/facturaEnPapel.xslt"?>
<files>
<file>main.xml</file>
<fileExtraData>extraData.xml</fileExtraData>
</files>
------------------------ END ---------------------------
And the "facturaEnPapel.xslt" is loading both files contents with:
------------------------ BEGIN -------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="main" select="document(/files/file, /)"/>
<xsl:variable name="extraData" select="document(/files/fileExtraData, /)"/>
...
------------------------ END ---------------------------
My problem is I can't seem to find how to get a particular node's value
using an "absolute" XPath.
For example... the "main" document contains:
------------------------ BEGIN -------------------------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Comprobante version="2.0" serie="ARH" folio="7909">
<Emisor rfc="SDF531211GE2" nombre="NOMBRE1">
...
</Emisor>
<Receptor rfc="SEFT760217GA1" nombre="NOMBRE2">
...
</Receptor>
...
------------------------ END ---------------------------
Imagine I want to obtain the second rfc (the one in "Receptor").
Here I show some tests, and their results:
------------------------ BEGIN -------------------------
0 [<xsl:value-of select="//_at_rfc"/>]<br></br>
1 [<xsl:value-of select="/Comprobante/Receptor/_at_rfc"/>]<br></br>
2 [<xsl:value-of select="Comprobante/Receptor/_at_rfc"/>]<br></br>
3 [<xsl:value-of select="//Comprobante/Receptor/_at_rfc"/>]<br></br>
4 [<xsl:value-of select="/Receptor/_at_rfc"/>]<br></br>
5 [<xsl:value-of select="Receptor/_at_rfc"/>]<br></br>
6 [<xsl:value-of select="//Receptor/_at_rfc"/>]<br></br>
........ results .........
0 [SDF531211GE2]
1 []
2 []
3 []
4 []
5 []
6 []
------------------------ END -------------------------
So I tried to find what parents does the "rfc" containing node.
I used the following XSLT code:
------------------------ BEGIN -------------------------
...
==[<br></br><xsl:apply-templates select="//_at_rfc"/>]==<br></br>
...
<xsl:template match="@rfc">
#[<xsl:call-template name="parents"/>]#<br></br>
</xsl:template>
...
<xsl:template name="parents">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat(name(),'/')" />
</xsl:for-each>
<xsl:value-of select="." />
</xsl:template>
------------------------ END ---------------------------
And I got:
------------------------ BEGIN -------------------------
==[
#[Comprobante/Emisor/SDF531211GE2]#
#[Comprobante/Receptor/SEFT760217GA1]#
]==
------------------------ END ---------------------------
So something like "/Comprobante/Receptor/_at_rfc" should work.
Am I right?
Any ideas about why it isn't working?
I'm very very thankful for the pointers I always get from this mailing list.
Ely.