簡體   English   中英

Java XSLT無法正常工作

[英]Java XSLT not working as expected

我試圖在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>

我在此工具和其他在線翻譯器工具上進行了嘗試,它們均按預期工作,因此當我向其提供以下非常簡單的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的嵌入式翻譯很爛。 這是一個例子嗎?

是Java還是XSL中的問題?

您的XSLT樣式表適合Saxon 6.5,Saxon 9.5和Xalan 2.7。 你確定你到底這個樣式表適用於正是這種輸入?

如果我從XSL文件中刪除了更改命名空間的代碼,並添加了一些非面向命名空間的更改,則Java運行良好,因此我認為運行翻譯的方式沒有任何問題。

我敢肯定這是有問題的。 這不一定意味着您的Java代碼是錯誤的,但是實現可能在某處出錯,並且運行時感知可能是由實際的錯誤引起的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM