首页 > 解决方案 > 使用 xslt 将 xml 元素拆分为两个而不影响其他标签

问题描述

我正在将一个 xml 转换为另一个 xml。我正在努力拆分这个元素。

<div class="cont">      (23)(A) “Component” means a uniquely identifiable <i>homogeneous material</b>, part, piece, <u>assembly</u>, is a necessary or intended element of a consumer product.</div>

应该

<div class="li1">(23)</p>
<div class="li2">(A) “Component” means a uniquely identifiable <i>homogeneous material</i>, part, piece, <u>assembly</u>, is a necessary or intended element of a consumer product.</div>

我尝试使用下面的代码。但是输出中缺少<i>and 。<u>

<xsl:analyze-string select="." regex="^&#x0a;*\s*(\([0-9]+\))(\([A]+\)(.+))">
                    <xsl:matching-substring>
                        <div class="li2"><xsl:copy-of select="regex-group(1)"></xsl:copy-of></div>
                        <div class="li2" par="inline"><xsl:copy-of select="regex-group(2)"></xsl:copy-of></div>
                    </xsl:matching-substring>
                 </xsl:analyze-string>

我的输出是

<div class="li1">(23)</p>
    <div class="li2">(A) “Component” means a uniquely identifiable homogeneous material, part, piece, assembly, is a necessary or intended element of a consumer product.</div>

请有人帮我解决这个问题

标签: xmlxslt

解决方案


也许用分析字符串拆分文本节点子节点就足够了,然后将第二部分和任何后续节点包装到第二个结果 div 中:

  <xsl:template match="div[@class = 'cont']">
      <xsl:variable name="this" select="."/>
      <xsl:analyze-string select="node()[1]" regex="^&#x0a;*\s*(\([0-9]+\))">
          <xsl:matching-substring>
              <div class="li2">
                  <xsl:value-of select="regex-group(1)"/>
              </div>
          </xsl:matching-substring>
          <xsl:non-matching-substring>
              <div class="li2" par="inline">
                  <xsl:value-of select="."/>
                  <xsl:apply-templates select="tail($this/node())"/>
              </div>
          </xsl:non-matching-substring>
      </xsl:analyze-string>
  </xsl:template>

推荐阅读