首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用DeltaXML进行比较时,将括号作为单词的一部分

在使用DeltaXML进行比较时,将括号作为单词的一部分
EN

Stack Overflow用户
提问于 2018-08-08 09:10:36
回答 1查看 51关注 0票数 0

我们需要在比较时将括号作为它们环绕的单词的一部分。

例如:

投入A:

嗨(A)

投入B:

嗨(B)

当前产出:

嗨(<Inserted>B<\Inserted> <Deleted>A<\Deleted>)

预期产出:

<Inserted>(B)<\Inserted> <Deleted>(A)<\Deleted>

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 11:09:46

在这个答案中,我假设您使用的是DeltaXML的DocumentComparator类。

这个类的默认行为是允许逐字比较.它通过将文本分割成空格、标点符号或单词元素来做到这一点。

因此,例如,对于输入A,您将得到:

代码语言:javascript
复制
...
<deltaxml:word>Hi</deltaxml:word>
<deltaxml:space>_</deltaxml:space>
<deltaxml:punctuation>(</deltaxml:punctuation>
<deltaxml:word>A</deltaxml:word>
<deltaxml:punctuation>)</deltaxml:punctuation>
...

作为比较器的A输入。

为了防止以这种方式分割文本,您需要一个XSLT输入过滤器,它在deltaxml:word元素中包装特定的文本模式,并带有deltaxml:逐字逐句=‘false’属性。以下是一些实现此功能的示例XSLT:

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:deltaxml="http://www.deltaxml.com/ns/well-formed-delta-v1"
                exclude-result-prefixes="#all"
                version="2.0">

  <xsl:template match="*|comment()|processing-instruction() | @*">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 
    wrap a specific text pattern in text as a word-element
    in this case, any non-whitespace characters surrounded by '(' and ')' chars
  -->
  <xsl:template match="text()">
    <xsl:analyze-string select="." regex="(\([^\s]*?\))">
      <xsl:matching-substring>
        <deltaxml:word deltaxml:word-by-word="false">
          <xsl:value-of select="current()"/>
        </deltaxml:word>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="current()"/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:template>
</xsl:stylesheet>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51742790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档