设置: Apache Xalan 2.7.1
输入:
Fragment
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>
<code>111</code>
<attr>good</attr>
</p>
<p>
<code>222</code>
<attr>bad</attr>
</p>
<s>
<ps>
<p>
<code>111</code>
</p>
<ps>
</s>
<s>
<ps>
<p>
<code>222</code>
</p>
<p>
<code>333</code>
</p>
<ps>
</s>
</root>
所需选择:
我只想选择那些<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="
root[./p/code = ./s/ps[1]/p/code and ./p/attr= 'bad']/s" />
</xsl:template>
<xsl:template match="s">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
s
p
s/ps
code
p
bad
attr
<form action="index.php" method="GET" name="myform">
<table id="matrix" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th width="5%"></th>
<th width="5%">ID</th>
<th width="25%">Name</th>
<th width="15%">price</th>
<th width="15%">count</th>
<th width="5%">Link</th>
</tr>
</thead>
<tbody>
<tr id="noresults">
<td align="center" colspan="6"><h3>No results</h3></td>
</tr>
<?
$query = "SELECT * FROM products";
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$html = "<tr>";
$html .= "<th><input class='ads_Checkbox' type='checkbox' name='products[]' value='".$row['pro_name']."' onclick='myFunction()'> </th>";
$html .= "<th>".$row['pro_id']."</th>";
$html .= "<td>".$row['pro_name']."</td>";
$html .= "<td><input type='number' name='prices[]' id='price' value='".$row['pro_price']."' disabled></td>";
$html .= "<td>".$row['pro_category']."</td>";
$html .= "<td>".$row['pro_link']."</td>";
$html .= "</tr>";
echo $html;
}?>
<input type="submit" name="submit" value="Submit">
<textarea rows="5" cols="30" id="order"></textarea>
</form>
元素<script>
function myFunction() {
var products = document.forms[1];
var txt = "";
var i;
for (i = 0; i < products.length; i++) {
if (products[i].checked) {
txt = txt + products[i].value + ", ";
}
}
document.getElementById("order").value = "" + txt;
document.getElementById("price").disabled=this.checked;
}
</script>
} {{1}}
注意:仅赞赏xslt 1.0解决方案
答案 0 :(得分:2)
考虑使用密钥查找p
元素
<xsl:key name="attr" match="root/p" use="code" />
然后您的xsl:apply-templates
简化为此
<xsl:apply-templates select="root/s[key('attr', ps/p[1]/code)/attr = 'bad']" />
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="attr" match="root/p" use="code" />
<xsl:template match="/">
<xsl:apply-templates select="root/s[key('attr', ps/p[1]/code)/attr = 'bad']" />
</xsl:template>
<xsl:template match="s">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>