我正在使用 XSLT 将一些 XML 转换为 HTML。 XML 不是我们创建的,它遵循一个漫长而复杂的模式,其中包含许多需要转换为适当 HTML 元素的自定义格式标记。当我转换它时,无效 HTML 的标签会被悄悄删除。
例如,
<P>(1) something something <PRTPAGE P=\"783\"/> something else. </P>
变成:
<P>(1) something something something else.</P>
当像 PRTPAGE
这样的标签被删除时,有没有办法输出某种警告?
由于架构出于多种目的重复使用相同的标签名称,因此我很难弄清楚哪些标签在我正在转换的标签中是有效的。我认为可能有一些标签需要它们自己的转换规则,这些警告可以帮助完善 XSL。
这是到目前为止我的 XSL。我使用内置的 javax.xml.transform.Transformer 来进行转换。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY mdash "—" >
]>
<xsl:stylesheet
xmlns:xsl=
"http://www.w3.org/1999/XSL/Transform"
version="3.0"
>
<xsl:character-map name="cm">
<xsl:output-character character="—" string="—"/>
</xsl:character-map>
<xsl:output use-character-maps="cm" method="xml" />
<xsl:template match="//E[@T='03']">
<span class="italic underline">
<xsl:apply-templates/>
</span>
</xsl:template>
</xsl:stylesheet>
最佳答案
这对于写在注释中来说有点太长了,但是如果 XSLT 正在删除元素,那是因为您没有添加任何模板来显式复制它们。当 XSLT 选择没有匹配模板的元素时,它会使用其内置模板来跳过元素,只复制其后代文本节点。
您可以尝试做的就是向 XSLT 添加通用模板以匹配所有其他元素,并使用 xsl:message
写出一条列出元素名称的消息
<xsl:template match="*">
<xsl:message>
<xsl:text>Dropping </xsl:text>
<xsl:value-of select="name()" />
</xsl:message>
<xsl:apply-templates />
</xsl:template>
(请注意,我对 javax.xml.transform.Transformer 一无所知,无法说明如何实际读取这些消息)。
关于java - Java 中的 XSLT 转换可以输出无效标签警告吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57676588/