我有一个HTML文件,我将其与XSL一起转换为另一个HTML文件(仅调整其结构,以便在大多数电子邮件客户端中看起来很好)。
从其他系统收到HTML,我无法修改此HTML的生成方式。
我的问题是内部包含XCUIElementsInTheBottomOrTableFooterView.tap()
XCTAssert(XCUIElementsInTheBottomOrTableFooterView.isHittable, "message")
的标签。 XSL转换忽略了它。
HTML输入:
HTML输出:
<span style="font-family: 'HelveticaNeue LT 45 Lt', serif; font-size: 12px; color:#000000">
IMPORTANT: The loan is repayable by 10 payments. The first Direct Debit payment will be collected along with other payments that are already due on...
</span>
两个空格都缺失,文字连接在一起:<p class="bodytext" align="justify" style="font-size:14px; font-weight:200; font-align:justify;">
IMPORTANT: The loan is repayable by 10 payments.The first Direct Debit payment will be collectedalong with any other payments that are already dueon...
</p>
和payments.The
。
XSL有点复杂。
dueon
我正在使用Saxon 9.1.0.8
经过一些谷歌搜索后,我尝试使用<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:character-map name="escape">
<xsl:output-character character="€" string="&euro;"/>
<xsl:output-character character=" " string="&nbsp;"/>
</xsl:character-map>
<xsl:output method="html" indent="yes" use-character-maps="escape"/>
<xsl:template match="body">
<html>
<head>
<meta name="generator" content="HTML EMail optimization by" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
...
...
<xsl:template name="TextTemplate">
<xsl:if test="not(starts-with(.,'XSLTButton'))">
<xsl:value-of select="text()"/>
</xsl:if>
</xsl:template>
,xsl:character-map
,更改编码......但没有任何效果。
唯一有效的方法是在INPUT html中向DOCTYPE添加xsl:preserve-space
声明,但我不想在此过程中创建额外的步骤来添加此位。
请帮忙。我应该添加什么,以便XSL / Saxon停止忽略[<!ENTITY nbsp " ">]
?
答案 0 :(得分:2)
支持DTD的XML解析器要求声明文档引用的实体。 XSLT处理要求扩展实体引用,因此符合标准的XSLT处理器通常使用符合DTD的XML解析器作为其前端。如果您继续提供使用未声明实体的处理输入,那么您将继续获得不满意的结果。
如果输入已经有一个文档类型声明,并引用了相应的DTD,那么您应该尝试使用支持DTD的解析器。如果没有,您可以注入这样的文档类型声明,或者您可以通过Tidy或某些类似的处理器运行HTML,该处理器采用HTML DTD并扩展所有实体引用。