Reputation: 11
I have two xml files 1. book.xml and 2. Store.xml , I want to read Uid from book.xml and update value in attribute BookId in store.xml
<?xml version="1.0" encoding="UTF-8"?>
<Book Type="0001" Bkey="book1" BName="abc">
<Pages >
<Page LineNo="1.1" >
<Lines Size="1.00"
Total="0.00" Lock="N"
Amount="20.00" Unit="20.00"/>
<Chars>
<Char
Uid="123456"
NoOfChars="1000" Processed="N"
Knowledge="Y">
</Char>
</Chars>
</Page>
</Pages>
</Book>`
Store.xml
<bookstore>
<book BookId="">
<Bkey> book1 </Bkey>
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
I need xslt to read Uid value from Book.xml and update BookId= attribute in Store.xml
looking for below xml:
<bookstore>
<book BookId="123456">
<Bkey> book1 </Bkey>
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
Upvotes: 1
Views: 36
Reputation: 59
Below is the XSLT which updates the Book Id in the Store.XML. You need to pass the Book.XML as the parameter for the XSLT processing.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:param name="book_docu" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="book/@BookId">
<xsl:variable name="bookKeyFromStore">
<xsl:value-of select="parent::node()/Bkey" />
</xsl:variable>
<xsl:attribute name="BookId">
<xsl:value-of select="$book_docu/Book[@Bkey=$bookKeyFromStore]/Pages/Page/Chars/Char/@Uid" />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Upvotes: 1