1

我输入了如下代码段,

输入片段:

    <div class="a">
      <table>
        <col width="4" />
        <col width="8" />
        <col width="5" />
        <tbody>
          <tr>
            <td>ABC</td>
            <td>DEF </td>
            <td>GHI</td>
          </tr>
        </tbody>
      </table>
    </div>
    <div class="x">

    <table>
        <col width="5" />
        <col width="8" />
        <col width="8" />
    <tbody>
          <tr>
            <td>ABC</td>
            <td>DEF </td>
            <td>GHI</td>
          </tr>
        </tbody>

我目前在div class="a"标记内的table中,我想检查紧随其后的兄弟是div并且它的第一个孩子是table或什么都没有。我编写了以下 XPath :../../following-sibling::div[1]/node()[1] ) = 'table'

我在altova XMLSpy中得到了预期的输出,但在saxon 解析器中没有给出准确的输出,因为 and 之间有一些空格<div><table>并且该空格被视为文本节点。

如何避免标签之间的空格,或者有没有其他解决方案?

片段代码:

<xsl:choose>

<xsl:when local-name(./../following-sibling::div[1]/node()[1] ) = 'table' ">    
  loagic-1
</xsl:when>
<xsl:otherwise>
logic-2 
  </xsl:otherwise>

</xsl:choose>
4

2 回答 2

1

你需要使用

<xsl:strip-space elements="*"/>

在样式表的顶层,告诉它在解析时忽略纯空格文本节点。

于 2012-09-24T11:28:32.270 回答
1

虽然伊恩的回答是正确的,但更清洁的解决方案是......

<xsl:when test="../following-sibling::div[1]/*[1]/self::table">

此外,如果您不关心 div 与其子表之间的任何干预元素,则可以简化为...

<xsl:when test="../following-sibling::div[1]/table">
于 2012-09-24T12:07:58.423 回答