xml - 使用 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="^
*\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>
请有人帮我解决这个问题
解决方案
也许用分析字符串拆分文本节点子节点就足够了,然后将第二部分和任何后续节点包装到第二个结果 div 中:
<xsl:template match="div[@class = 'cont']">
<xsl:variable name="this" select="."/>
<xsl:analyze-string select="node()[1]" regex="^
*\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>
推荐阅读
- c++ - 读取系统调用返回错误的字节数
- c++ - 从 istream_iterator 理解相等
- c++ - Linux:由于服务器/磁盘中的电源/瞬态机械故障,目录重命名是否可以部分执行?
- java - 当我尝试在 tomcat 8 中部署时,JsonIgnore 注释不起作用
- javascript - 如何添加自定义标头以访问页面 URL,然后在该页面上执行测试自动化,我正在使用 webdriverio、mocha、nodejs 框架
- swift - swift中的自定义属性字符串操作
- swagger - 在 aspnetboilerplate 中将 API 控制器添加到我的主机项目时,Swagger 中断
- swift - 如何将图像叠加层添加到 MKMapView?
- php - MySQL 在同一个 PHP 页面上加载和删除
- linux - 如何修复“配置:不兼容的霓虹灯库版本 0.29.3:想要 0.25 26 27 28”