【问题标题】:xslt xpath using element values in xpath queryxslt xpath 在 xpath 查询中使用元素值
【发布时间】:2015-11-15 03:41:30
【问题描述】:

是否可以在 xpath 中使用元素值?我有以下 xml:

<root>
 <html>
  <table class=" table search-results-property-table">  
                 ....
   <tr>
    <td>
     <span class="versal">HAS TAXONOMIC LEVEL</span>
    </td>
    <td>
     <ul>
      <li>
       <a class="versal" href="../../../agrovoc/en/page/c_11125">genus</a>
      </li>
     </ul>
    </td>
   </tr>
   <tr>
    <td>
     <span class="versal">IS USED AS</span>
    </td>
    <td>
     <ul>
      <li>
       <a class="versal" href="../../../agrovoc/en/page/c_1591">christmas trees</a>
      </li>
      <li>
       <a class="versal" href="../../../agrovoc/en/page/c_7776">timber trees</a>
      </li>
     </ul>
    </td>
   </tr>
    ....
  <table>
 </html>
 <html>
   [second data set...]
    ...
<root>

我希望元素值 HAS TAXONOMIC LEVEL 和 IS USED AS 用于 xpath。接下来是输出它们的值(例如HAS TAXONOMIC LEVEL),然后得到兄弟td的后代的值:在/ul/li/a -> genus下HAS TAXONOMIC LEVEL和圣诞树和木材树在IS USED AS下。所以我得到以下信息:

START HERE
=LDR  00000nam  2200000Ia 4500
=305  \\$aHAS TAXONOMIC LEVEL$bgenus
=305  \\$aIS USED AS$bchrismas trees
=305  \\$aIS USED AS$btimber trees

START HERE
=LDR  00000nam  2200000Ia 4500
  (second data set and so on..)

请注意,我在此文件中有多个文档,格式如下:

<root>
 <html>
   [DATA SET 1]
         ....
 </html>
      <html>
   [DATA SET 2]
         ....
 </html>
       .....
</root>

感谢和欢呼!

【问题讨论】:

    标签: xml xslt xpath xml-parsing xslt-1.0


    【解决方案1】:

    尝试类似:

    <xsl:template match="/root">
        <xsl:for-each select="html/table/tr[td/span='HAS TAXONOMIC LEVEL' or td/span='IS USED AS']">
            <xsl:variable name="span" select="td/span" />
            <xsl:for-each select="td/ul/li/a">
                <xsl:text>$new-line </xsl:text>
                <xsl:value-of select="$span"/>
                <xsl:text> $separator </xsl:text>
                <xsl:value-of select="."/>
                <xsl:text>&#10;</xsl:text>
            </xsl:for-each>
        </xsl:for-each> 
    </xsl:template>
    

    然后在 /ul/li/a 中获取它们下面的值

    你错了:这些值不是“低于”它们;他们是兄弟td的后代。

    【讨论】:

    • 谢谢!这行得通,现在我必须将它集成到我的整个 xslt 中。不过,我有一个后续问题,如何盲目获取 span class="versal" 的所有元素值并将这些值用作占位符并获取兄弟 td 的后代的值。我实际上是想通过键来回答我的问题,但是您的回答解决了我的问题。谢谢和欢呼!
    • @schnydszch "如何盲目获取 span class="versal" 的所有元素值,并将这些值用作占位符并获取兄弟 td 的后代的值。"我不确定你的意思是什么。您为什么不发布一个单独的问题并更详细地解释一下?
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多