XSLT - 深度平等的意外行为

时间:2016-07-04 09:47:59

标签: xml xslt-2.0

给定文件A包含:

def serialization_id(self):
    milliseconds = str(int(datetime_to_epoch(self.updated_at)* 1000))
    return milliseconds

文件B包含:

<body>
   <ul id="d76e10">         
      <li id="d76e11">Zoom In: Enlarges.</li>
      <li id="d76e13">Zoom Out: Reduces.</li>
   </ul>
</body>

最后文件C包含:

<body>
   <ul id="d78e10">
      <li id="d78e11"><uicontrol id="d78e12">Zoom In</uicontrol>: Enlarges.</li>
      <li id="d78e15"><uicontrol id="d78e16">Zoom Out</uicontrol>: Reduces.</li>
  </ul>
</body>

我正在尝试在文件C和A或文件C和B之间找到相同的<body> <ul> <li> <p>Zoom In: Enlarges a section of the chart to show more detail.</p></li> <li>other stuff</li> </ul> </body> 标记。

所以基本上,根据previous question

我做了以下事情
<li>

当我运行此代码时,我得到了文件A B的正面评价。 很明显,似乎规范化空间可能做了一些事情,因为我没有尝试过,而且没有像预期的那样受到打击。

有人能帮我理解为什么normalize-space似乎会破坏子节点吗?

另外,如何让Deep-equal函数忽略<xsl:template match="li"> <xsl:variable name="matched-doc" select="$ref-docs[//li[deep-equal(normalize-space(.), normalize-space(current()))]]" /> <!-- ref-docs contains file A and B. --> </xsl:template> 属性?

1 个答案:

答案 0 :(得分:1)

函数normalize-space返回一个原始字符串值,比较字符串当然与比较节点不同。

至于忽略属性,您需要首先转换节点并删除要忽略的属性,然后您可以deep-equal比较转换后的节点。

或者您可以检查您的处理器是否支持对比较具有更多控制权的扩展程序,例如http://saxonica.com/html/documentation/functions/saxon/deep-equal.html,并且扩展程序支持您想要的内容。