У меня есть XML-файл со следующими данными:
<BOOKS>
<BOOK>
<TITLE image="./images/govnahDesign.jpg">Bible</TITLE>
<CATEGORY>Book</CATEGORY>
<GENRE>Gospel</GENRE>
<PRICE>0.00</PRICE>
<SUMMARY>This is the BOOK of life. The truth and the light.</SUMMARY>
<REVIEW>This indeed the truth and the light. This BOOK is pure fact no fiction.</REVIEW>
</BOOK>
<BOOK>
<TITLE image="./images/govnahDesign.jpg">Scrap Book</TITLE>
<CATEGORY>Novel</CATEGORY>
<GENRE>Ghetto Gospel</GENRE>
<PRICE>19.00</PRICE>
<SUMMARY>This a message from Guvnah B. UK gospel artist doing it big no long things</SUMMARY>
<REVIEW>I love this message. It gives life a fresh air and makes you love life.</REVIEW>
</BOOK>
<BOOK>
<TITLE image="./images/govnahDesign.jpg">Daddy's Boy</TITLE>
<CATEGORY>Magazine</CATEGORY>
<GENRE>Gospel</GENRE>
<PRICE>2.00</PRICE>
<SUMMARY>This is for Christians who has a father up in Heaven. He really loves his children.</SUMMARY>
<REVIEW>This makes me want a father like they talking about. He must be a great father. Great magazine.</REVIEW>
</BOOK>
</BOOKS>
В настоящее время я отображаю каждый файл в отдельных xsl-файлах.
пример: это будет файл xsl для категории = 'Книга "
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="BOOKS/BOOK">
<xsl:if test="CATEGORY='Book'"><!-- Show category NOVEL only -->
<div class="item">
<xsl:value-of select="TITLE"/>
<img>
<xsl:attribute name="src">
<xsl:value-of select="TITLE//@image"/>
</xsl:attribute>
</img>
Price: <xsl:value-of select="PRICE"/>
<button id="view" onclick="javascript:viewBook()">View</button>
</div>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Мой вопрос: возможно ли иметь только один xsl-файл, в котором я могу изменить значение категории в операторе if при открытии xsl-файла?
<xsl:if test="CATEGORY='Book'">
Я открываю файл xsl с помощью javascript в div на главной странице.
Я искал пару дней, сейчас пытаюсь использовать javascript для передачи значения, но безрезультатно. Любые указания, помощь и советы будут высоко ценится.
Спасибо
Дополнительно:
java-скрипт, который открывает необходимый xsl-файл в зависимости от имени категории:
var root=xmlDoc.getElementsByTagName("CATEGORY");
strVal = new Array();
for (i=0;i<root.length;++i) {
var title=(root[i].childNodes[0].nodeValue);
strVal[i]='<li><a href="#" onClick="javascript:Navigate(\''+xslCatFileName+'\')">'+xslCatFileName+'</a></li>';
string = string + strVal[i];
}
document.getElementById("category").innerHTML+=string;
Вот функция Navigation () для вышеуказанных вызовов:
function Navigate(catName) {
//create an instance of the DOMDocument object.
var xmlDoc=new ActiveXObject ("Msxml2.DOMDocument.6.0");
var xslDoc=new ActiveXObject("Msxml2.DOMDocument.6.0");
var i;
xmlDoc.async=false;
xslDoc.async=false;
//stores the category passed
var xslCatName = catName;
xmlDoc.load("./xml/books.xml");
xslDoc.load("./xml/"+xslCatName+".xsl");
//check wether the process of loading is complete and that there are no errors in the XML document.
if (xmlDoc.readyState == 4 && xmlDoc.parseError.errorCode == 0) {
var output=xmlDoc.transformNode(xslDoc); //transforms the xml sheet to xslt
//this clears the div before it loads
var y = document.getElementById('showBOOKS'), child;
while(child=y.firstChild)
y.removeChild(child);
document.getElementById("showBOOKS").innerHTML+=output;
}
//if the XML document contains an error, display an error message.
else {
alert("Failed to load the document. Check wether your XML document is well-formed");
}
}