java - Java 中的 XSLT 转换可以输出无效标签警告吗

标签 java xml xslt

我正在使用 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  "&#x2014;" >
        ]>
<xsl:stylesheet
        xmlns:xsl=
                "http://www.w3.org/1999/XSL/Transform"
        version="3.0"
>

    <xsl:character-map name="cm">
        <xsl:output-character character="&mdash;" 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/

相关文章:

java - 关于如何组织 Java 类的建议

java - 咆哮位图使用比普通位集更多的存储空间

java - 在 Java 中从 PostgreSQL 检索 xml 数组

xml - pdf 的 XSL-fo 图像大小问题

javascript - 使用 XSL 进行跨浏览器 XML 操作和解析(Chrome、Firefox 和 IE 8/11)

java - 转换/验证的首选方式 - XSLT/XSD

java - 每 5 秒更改一次 TextView

java - JSOUP - 如何使用 JSOUP 抓取 "login required"页面

xml - 在 Emacs 上漂亮地打印 XML 文件

python - 如何在 Python 中使用 OpenSSL 从 pfx 文件中提取 key ?