gpt4 book ai didi

Java XSLT 未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:34 24 4
gpt4 key购买 nike

我正在尝试在 Java 中运行 XSL 转换来更改某些 XML 文件上的命名空间 URI。经过一些研究,我制定了以下 XSL:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tridasold="http://www.tridas.org/1.2.2"
xmlns:t="http://www.tridas.org/1.2.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="@tridasold:*">
<xsl:attribute name="t:{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>

<xsl:template match="tridasold:*">
<xsl:element name="t:{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

我在 this and other online translator tools 上尝试过一切都按照我的预期工作,因此当我向它提供以下非常简单的 XML 文件时:

<project xmlns="http://www.tridas.org/1.2.2">
<title>title0</title>
</project>

...它返回:

<t:project xmlns:t="http://www.tridas.org/1.2.3">
<t:title>title0</t:title>
</t:project>

但是,当我尝试在 Java 中运行相同的翻译时,我得到:

java.lang.RuntimeException: Namespace for prefix 't' has not been declared.
at com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary.runTimeError(BasisLibrary.java:1603)
at com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary.runTimeError(BasisLibrary.java:1607)
at com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary.startXslElement(BasisLibrary.java:1490)
at GregorSamsa.template$dot$2()
at GregorSamsa.applyTemplates()
at GregorSamsa.applyTemplates()
at GregorSamsa.transform()
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:617)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:748)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:359)

问题出在 Java 还是我的 XSL 上?如果我从 XSL 文件中删除命名空间更改代码并添加一些非面向命名空间的更改,Java 运行良好,因此我认为运行翻译的方式没有任何问题。

我在各种帖子中都看到过,Java 中的嵌入式翻译器很糟糕。这是一个例子吗?

最佳答案

Is the problem in Java or my XSL?

您的 XSLT 样式表适用于 Saxon 6.5、Saxon 9.5 和 Xalan 2.7。您确定将此样式表完全应用到完全此输入吗?

If I remove the namespace changing code from the XSL file and add some non-namespace oriented changes, Java runs fine so I don't think there is anything wrong with the way I'm running the translation.

我确信它有问题。这并不一定意味着您的 Java 代码是错误的,但实现可能会在某个地方出错,并且运行时异常可能是由实际错误引起的。

关于Java XSLT 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722012/

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