2016-09-12 5 views
0

Я искал некоторую помощь, я искал в Интернете более недели, пытаясь расширить свои ограниченные знания в поиске XML-файла, чтобы найти конкретную запись, основанную на пользовательских вводах от html-форму.html open xslt и pass variable

Я пробовал xpath, но мои знания javascripting ограничены, и я не мог заставить это работать.

Я прибегал к xsl для стилизации моего xml, он очень хорошо работает, когда я жестко кодирую то, что ищу, я бы очень хотел, чтобы эта динамика была основана на моем html на входе, однако я действительно борясь с кодом, чтобы заставить это работать, есть также несколько примеров того, как настроить html-часть вещей, которые я нашел.

XSL

<?xml version="1.0" encoding="UTF-8"?> 
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
 
    <xsl:param name="skuid" /> 
 
    <xsl:template match="/"> 
 
     <xsl:apply-templates select="//sku[@id=$skuid]" /> 
 
    </xsl:template> 
 
    
 
    <xsl:template match="sku"> 
 
<html> 
 
    <body> 
 
<h2>Availability:</h2> 
 

 
    <table border="1"> 
 
    <tr bgcolor="#9acd32"> 
 
     <th>Sku Code</th> 
 
     <th>Description</th> 
 
\t <th>Due Date</th> 
 
\t <th>Due Qty</th> 
 
\t </tr> 
 
\t <tr> 
 
     <td align="center"><xsl:value-of select="skucode"/></td> 
 
     <td align="center"><xsl:value-of select="description"/></td> 
 
\t <td align="center"><xsl:value-of select="duedate"/></td> 
 
\t <td align="center"><xsl:value-of select="dueqty"/></td> 
 
\t </tr> 
 
\t <tr bgcolor="#9acd32"> 
 
\t <th colspan="2" align="center">Ranged Currrent Cat</th> 
 
\t <th colspan="2" align="center">Ranged Next Cat</th> 
 
    </tr> 
 
    <tr> 
 
\t <td colspan="2" align="center"><xsl:value-of select="currcat"/></td> 
 
\t <td colspan="2" align="center"><xsl:value-of select="nextcat"/></td> 
 
    </tr> \t 
 
    </table> 
 
    </body> 
 
    </html> 
 
\t </xsl:template> 
 
    
 

 
</xsl:stylesheet>

XML

<?xml version="1.0"?> 
 
<?xml-stylesheet type="text/xsl" href="employees2.xsl"?> 
 
<availability> 
 
<sku id="10011"> 
 
<skucode>10011</skucode> 
 
<description>4 Gallon Loft Tank Kit</description> 
 
<duedate>07/09/2016</duedate> 
 
<dueqty>10.00</dueqty> 
 
<currcat>Main Cat In Store</currcat> 
 
<nextcat>Main Cat In Store</nextcat> 
 
</sku> 
 
<sku id="10018"> 
 
<skucode>10018</skucode> 
 
<description>MATT EMULSION PINK 2/5L</description> 
 
<duedate>09/09/2016</duedate> 
 
<dueqty>100</dueqty> 
 
<currcat>Not Ranged</currcat> 
 
<nextcat>Not Ranged</nextcat> 
 
</sku> 
 
<sku id="12345"> 
 
<skucode>12345</skucode> 
 
<description>DeWalt Drill</description> 
 
<duedate>10/09/2016</duedate> 
 
<dueqty>1000</dueqty> 
 
<currcat>Main Cat In Store</currcat> 
 
<nextcat>Main Cat In Store</nextcat> 
 
</sku> 
 
<sku id="98765"> 
 
<skucode>98765</skucode> 
 
<description>Wheel Barrow</description> 
 
<duedate>31/09/2016</duedate> 
 
<dueqty>1</dueqty> 
 
<currcat>Not Ranged</currcat> 
 
<nextcat>Not Ranged</nextcat> 
 
</sku> 
 
</availability>

<!DOCTYPE html> 
 
<html> 
 
<body> 
 
SKU: <input type="text" name="SKU" id="input" maxlength="5"> 
 
<br /> 
 
<input type="submit" value="Submit" onClick="loadXMLDoc()"> 
 
<br /> 
 
<br /> 
 
<div id="results"></div> 
 

 
<script> 
 

 
function loadXMLDoc(dname) 
 
{ 
 
if (window.XMLHttpRequest) 
 
    { 
 
    xhttp=new XMLHttpRequest(); 
 
    } 
 
else 
 
    { 
 
    xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
 
    } 
 
xhttp.open("GET",dname,false); 
 
try {xhttp.responseType="msxml-document"} catch(err) {} // Helping IE 
 
xhttp.send(""); 
 
return xhttp; 
 
} 
 
var y = document.getElementById("input").value; 
 
var x=loadXMLDoc("employees.xml"); 
 
var xml=x.responseXML; 
 
path="/Availability/sku[@id=y]"; 
 

 
// code for IE 
 
if (window.ActiveXObject || xhttp.responseType=="msxml-document") 
 
{ 
 
xml.setProperty("SelectionLanguage","XPath"); 
 
nodes=xml.selectNodes(path); 
 
for (i=0;i<nodes.length;i++) 
 
    { 
 
    document.write(nodes[i].childNodes[0].nodeValue); 
 
    document.write("<br>"); 
 
    } 
 
} 
 

 
// code for Chrome, Firefox, Opera, etc. 
 
else if (document.implementation && document.implementation.createDocument) 
 
{ 
 
var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 
 
var result=nodes.iterateNext(); 
 

 
while (result) 
 
    { 
 
    document.write(result.childNodes[0].nodeValue); 
 
    document.write("<br>"); 
 
    result=nodes.iterateNext(); 
 
    } 
 
} 
 

 
</script> 
 

 
</body> 
 
</html>

вид касается Павла

+0

Добро пожаловать в SO @PaulWills :-) Можете ли вы немного рассказать о «Я не мог заставить это работать»? Что именно происходит? Вы ссылаетесь на xslt в любом месте html? Какие-либо ошибки появляются в консоли? –

ответ

0

В вашем выражении пути

путь = "/ Доступность/ы [@ ид = у]";

«y» означает «значение дочернего элемента элемента sku с именем« y », это не означает« значение переменной Javascript с именем «y».

Я забыл, имеет ли браузер DOM XPath API механизм замены значений параметров; если нет, вы можете использовать конкатенацию строк для создания выражения пути, содержащего значение y в виде строкового литерала. Но будьте осторожны с инъекционными атаками.