xsl-list
[Top] [All Lists]

Re: mixing two XMLs

2002-11-08 04:56:52
** Reply to message from "Felix Garcia" <fnmtool(_at_)hotmail(_dot_)com> on 
Fri, 08 Nov
2002 11:37:46 +0000

Dear Felix,

I have two XML and I want to mix them depending on a element value , like 
two tables with a relation in a relational database

I would suggest

* Use the first file, with the book information, as the input to your XSLT.
* Start with an identify transformation that copies everything.
* Create a template for <book> that copies its content, then use the
"document()" function to add the page information.

So, the <book> template would look like (and I haven't tested this)

        <xsl:template match = "book">
                <xsl:copy>
                        <xsl:apply-templates/> <!-- assumes you have default 
"copy everything"
templates set up -->
                        <xsl:variable name = "bookId" select = "id_book"/>
                        <xsl:apply-templates select = 
"document('pages.xml')/pages/page[id_book =
$bookId]>
                </xsl:copy>
        </xsl:template>

You also need to remove the page's book ID, so you also need

        <xsl:template match = "page/id_book"/>

so suppress it.  Hope that helps.  With big documents, you might want to use an
XSLT key to index pages by their book ID, but that's just an extra.

        Cheers,
                Tony.

My XMLs are:

<books>
      <book>
              <id_book>2</idbook>
              <tittle>title1</tittle>
              <Edition>2000</Edition>
              <chapters>
                      <number>12</number>
              </chapters>
      </book>
      <book>
              <id_book>7</idbook>
              <tittle>title2</tittle>
              <Edition>2001</Edition>
              <chapters>
                      <number>19</number>
              </chapters>
      </book>
      <book>
              <id_book>9</idbook>
              <tittle>title3</tittle>
              <Edition>2001</Edition>
              <chapters>
                      <number>9</number>
              </chapters>
      </book>
</books>

<pages>
      <page>
              <id_book>2</id_book>
              <n_page>765</n_page>
              <topic_data>
                      <ocurrences>34</ocurrences>
                      <value>tree</value>
              </topic_data>
      </page>
      <page>
              <id_book>9</id_book>
              <n_page>1023</n_page>
              <topic_data>
                      <ocurrences>21</ocurrences>
                      <value>bird</value>
              </topic_data>
      </page>
<pages>

And I want to generate next xml.The element used as 'key' is id_book:

<books>
      <book>
              <id_book>2</idbook>
              <tittle>title1</tittle>
              <Edition>2000</Edition>
              <chapters>
                      <number>12</number>
              </chapters>
              <page>
                      <n_page>765</n_page>
                      <topic_data>
                              <ocurrences>34</ocurrences>
                              <value>tree</value>
                      </topic_data>
              </page>
      </book>
      <book>
              <id_book>7</idbook>
              <tittle>title2</tittle>
              <Edition>2001</Edition>
              <chapters>
                      <number>19</number>
              </chapters>
      </book>
      <book>
              <id_book>9</idbook>
              <tittle>title3</tittle>
              <Edition>2001</Edition>
              <chapters>
                      <number>24</number>
              </chapters>
              <page>
                      <n_page>1023</n_page>
                      <topic_data>
                              <ocurrences>21</ocurrences>
                              <value>bird</value>
                      </topic_data>
              </page>
      </book>
</books>
====
Anthony B. Coates, Information & Software Architect
mailto:abcoates(_at_)TheOffice(_dot_)net
MDDL Editor (Market Data Definition Language)
http://www.mddl.org/

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



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