OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Data mapping / loading (?)



Jeff: I simplified your problem a little turning all of your value#n tags
in source into straight value tags. The following command

   saxon -o combined.xml source.xml dest.xml

Generates this output:

   file combined.xml
   <?xml version="1.0" encoding="utf-8"?>
   <mapping>
      <source href="source.xml"/>
      <dest href="dest.xml"/>
      <assign source="10" dest="Five plus five equals?"/>
      <assign source="0" dest="Five minus five equals?"/>
   </mapping>

Regards,

Dan
------------
file: source.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="source.xsl"?>
<source>
 <value>10</value>
 <value>0</value>
</source>

file: dest.xml
<?xml version="1.0"?>
<dest>
 <question>Five plus five equals?</question>
 <question>Five minus five equals?</question>
</dest>

file: source.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   
 <xsl:output indent="yes"/>
 <xsl:variable name="dest"  select='document("dest.xml")'/>
	
 <xsl:template match="/">
  <xsl:element name="mapping">
   <xsl:apply-templates select="source"/>   
  </xsl:element>
 </xsl:template>
	
 <xsl:template match="source">
  <xsl:element name="source" >
   <xsl:attribute name="href">source.xml</xsl:attribute>
  </xsl:element>
  <xsl:element name="dest" >
   <xsl:attribute name="href">dest.xml</xsl:attribute>
  </xsl:element>
  <xsl:for-each select="value">
   <xsl:variable name="ipos" select="position()"/>
   <xsl:element name="assign" >
    <xsl:attribute name="source">
     <xsl:value-of select="."/>
    </xsl:attribute>
    <xsl:attribute name="dest">
     <xsl:value-of select="$dest/dest/question[position()=$ipos]"/>
    </xsl:attribute>
   </xsl:element>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>
--- Jeff Rafter <jeffrafter@earthlink.net> wrote:
> Sorry for the vague subject-- I have been searching for a simple way to load
> data from one XML file into another and haven't found exactly what I am
> looking for.  What I want to do is load an XML file with data values
> (source) and load an XML file with some content (dest) and then move
> contents from source to dest.  I would like to create a third "mapping" file
> that specifies how to move the data from one to the other, most likely using
> XPath.  The following is a simplified example of what I am looking for
> 
> source.xml
> =======
> <source>
>   <value1>10</value1>
> </source>
> 
> dest.xml
> ======
> <dest>
>   <question>Five plus five equals?</question>
>   <answer name="value1"></answer>
> </dest>
> 
> mapping.xml
> =========
> <mapping>
>   <source href="source.xml"/>
>   <dest href="dest.xml"/>
>   <assign source="source/value1" dest="dest/answer[@name='value1']">
> </mapping>
> 
> I know it is most likely possible using XSLT but I haven't figured out how
> to do it without copying the whole destination document-- which seems like
> overkill when I only want to change a few nodes.  Is XSLT the answer? Anyone
> have any ideas?
> 
> Thanks in advance,
> Jeff Rafter
> 
> 
> ------------------------------------------------------------------
> The xml-dev list is sponsored by XML.org, an initiative of OASIS
> <http://www.oasis-open.org>
> 
> The list archives are at http://lists.xml.org/archives/xml-dev/
> 
> To unsubscribe from this elist send a message with the single word
> "unsubscribe" in the body to: xml-dev-request@lists.xml.org


__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/