从xml检索数据并以html格式显示

时间:2014-02-25 17:20:58

标签: html xml xpath xquery

我是第一次使用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> 

2 个答案:

答案 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。根据您要运行处理器的位置,查看以下内容: