如何在 xslt 中使用 xpath 来导航 xhtml 文件?

How to use xpath in xslt to navigate a xhtml file?

提问人:Emanuel 提问时间:3/30/2020 最后编辑:Emanuel 更新时间:3/31/2020 访问量:139

问:

有什么方法可以在 XSLT 中使用 XPATH 导航 XHTML 文件?所以我有这个xhtml文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
<!--  <link rel="stylesheet" type="text/css" href="stili.css" />  -->   
    <script src="jsorari.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
<h1 style="text-align: center;">XMLHTTPREQUEST</h1>
<!--<div id="div1"></div>-->
<!--   <p id="txt1"></p>  <p id="txt2"></p>-->

<select id="dega" onchange="changeddl1(this);"></select><br/><br/>

<select id="viti" onchange="changeddl2(this)"></select><br/>

<select id="paralel" name="Paralel"></select><br/>

<button type="button" name="btn" id="btn1" onclick="afishovlera()">Afisho</button>
        </div><br/><br/>

        <table id="afishim"></table>

    </form>
</body>
</html>

假设我想使用 id=viti 导航到选择 我该怎么做以及我应该在xhtml和xslt文件中包含哪些命名空间,如果有办法的话。请帮帮我。

这是完整的 xslt 文件:

 <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes"/>
    <xsl:variable name="Viti" select="//*[@id='viti']" />
    <xsl:variable name="Paraleli" select="//*[@id='paralel']" />
    <xsl:strip-space elements="*"/>
    <xsl:template match="/">
      <h2>Orari mesimor</h2>
      <table border="1" style="border-collapse:collapse;">
        <tr bgcolor="#71F9FF">
          <th style="text-align:left">Lenda</th>
          <th style="text-align:left">Tipi</th>
          <th style="text-align:left">Pedagog</th>
          <th style="text-align:left">Dita</th>
          <th style="text-align:left">Klasa</th>
          <th style="text-align:left">Ora</th>
          <th style="text-align:left">Viti</th>
          <th style="text-align:left">Paraleli</th>
        </tr>
        <xsl:for-each select="Orare/Orar">    
        <tr>
        <xsl:if test="Viti = $Viti and Paraleli = $Paraleli">
          <td><xsl:value-of select="Lenda"/></td>
          <td><xsl:value-of select="Tipi"/></td>
          <td><xsl:value-of select="Pedagog"/></td>
          <td><xsl:value-of select="Dita"/></td>
          <td><xsl:value-of select="Klasa"/></td>
          <td><xsl:value-of select="Ora"/></td>
          <td><xsl:value-of select="Viti"/></td>
          <td><xsl:value-of select="Paraleli"/></td>
        </tr>    
        </xsl:if>
        </xsl:for-each>    
      </table>
    </xsl:template>
    </xsl:stylesheet>

这是xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href='xsltorari.xsl'?>
<Orare>
<Orar>
  <Dega>Bachelor në "Teknologji Informacioni dhe komunikimi"</Dega>
  <Viti>2</Viti>
  <Paraleli>B1</Paraleli>
  <Lenda>Grafe dhe alogoritme</Lenda>
  <Tipi>seminar</Tipi>
  <Pedagog>N/A</Pedagog>
  <Dita>E Martë</Dita>
  <Klasa>Salla I1 (200 C)</Klasa>
  <Ora>17:00-18:00</Ora>
</Orar>
<Orar>
  <Dega>Bachelor në "Teknologji Informacioni dhe komunikimi"</Dega>
  <Viti>3</Viti>
  <Paraleli>A</Paraleli>
  <Lenda>Administrimi dhe siguria e sistemeve</Lenda>
  <Tipi>leksion</Tipi>
  <Pedagog>N/A</Pedagog>
  <Dita>E Hënë</Dita>
  <Klasa>KlasaD3</Klasa>
  <Ora>13:00-14:00</Ora>
</Orar>

我不知道为什么这段代码不起作用。请任何人帮助我。 我想根据viti from xml等于$Viti from select时的条件显示xml文件。请帮帮我。

javascript xml xslt xpath xhtml

评论

0赞 Stefan Hegny 4/1/2020
Viti = $Viti这意味着您将 @id=“viti” 的内容与相对于当前节点命名的元素的内容进行比较,但在 XSLT 中,当前节点没有名为Viti/Viti

答:

0赞 Michael Kay 3/30/2020 #1

获取此元素的最简单方法是//*[@id='viti']

评论

0赞 Emanuel 3/31/2020
我按照你说的做了,并将 select 中的值放入 xslt 中的全局变量。现在,当我将变量的值获取到 xsl:if 时,输出什么也没显示。为什么会这样,你能帮帮我吗?如果你愿意,我可以在这里粘贴所有xslt文件。注意:我是这样放置选择值的:<xsl:variable name=“Viti” select=“//*[@id='viti']” />这是正确的方法吗?
0赞 Emanuel 3/31/2020
我将把所有xslt文件和xml文件的一部分
0赞 Michael Kay 3/31/2020
您的问题现在包括一个 XHTML 文件和一个 XML 文件,以及一个有时似乎在读取 XHTML,有时似乎在读取 XML 的 XSLT 样式表。一个样式表很有可能有两个不同的源文档,但你需要区分它们......
0赞 Emanuel 3/31/2020
我知道我要求太多了,但我怎么能区分它们呢?请帮帮我
0赞 Michael Kay 3/31/2020
对不起,这不是学习编程语言的方法。我太忙了,没时间给你一个个人教程——如果你愿意阅读它,有很多信息可用。如果你遇到困难,可以问一个具体的问题,但要开始,你需要做一些阅读。