gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:34:13 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com