我是第一次使用XML,非常感谢帮助解决我的问题。我尝试过很少的东西,但它无法从XML中检索数据。
我有以下类型的XML
<?xml version="1.0" encoding="utf-8" ?>
<search>
<criterias>
<criteria operator="EqualTo" xmlpath="//Title/TitleKey">
<value1>1</value1>
</criteria>
<criteria operator="EqualTo" xmlpath="//Title/SubTitleKey">
<value1>1</value1>
</criteria>
<freecriteria operator="EqualTo" xmlpath="//UseMaxRowsToReturn">
<value1>1</value1>
</freecriteria>
<criteria operator="Contains" xmlpath="//Title/TitleReference" >
<value1>001</value1>
<desc>Title referenece</desc></criteria>
<criteria operator="Contains" xmlpath="//Title/TitleFamily/TitleReference">
<value1>Title number</value1>
</criteria>
</criterias>
</search>
我想要检索值为'001'的XML格式。我想把它们作为HTML中的超链接。总之,我希望在HTML页面中显示它。我创建了XSL文件,但没有检索到该值。我正在尝试x查询例如
<html>
<body>
<h1>Search</h1>
<ul>
{
for $x in doc("Titlesearch.xml")//Title/TitleReference
order by $x/TitleReference
return <li>< a href:"a.txt">{data($x/TitleReference)}. Title: {data
($x/@Title)}</a>
</li>
}
</ul>
</body>
</html>
但它没有产生任何结果,甚至不是html <h1>
我也用过xslt以下。
在此处输入代码
<td><a><xsl:value-of select="//Title/TitleReference"/></a></td>
<td><xsl:value-of select="="//Title/TitleFamily/TitleReference"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
您的XPath语法与您用作输入文档的XML完全不匹配。属性xmlpath
只是字符串,它们并不意味着任何类型的XPath。您需要的XPath应该导航源文档。
由于您的XPath根本不符合您的XML文档,因此很难确切知道您要实现的目标。但是,例如,您可能实际上正在尝试执行以下操作:
<html>
<body>
<h1>Search</h1>
<ul>
{
for $x in doc("Titlesearch.xml")/search/criterias/criteria[@operator eq "Contains"][@xmlpath eq "//Title/TitleReference"]
order by $x/value1
return
<li>
<a href="{$x/value1}.txt">Title: {$x/value1/text()}</a>
</li>
}
</ul>
</body>
</html>
另外我要注意,根据您使用的XQuery处理器,您可能需要在doc
的参数中提供一个绝对URI,它定位您的Titlesearch.xml
,例如
doc("file:/some/path/on/your/computer/Titlesearch.xml")
答案 1 :(得分:1)
您需要一台XSLT处理器才能运行XSL
。根据您要运行处理器的位置,查看以下内容: