当前位置: 首页 > 面试题库 >

将文档作为参数传递给Java中的XSL Translation

羊丰茂
2023-03-14
问题内容

我正在为XSL进行附加国际化。我已经看到了许多创建dictionary.xml文件并通过document(’dictionary.xml’)将其加载到XSL中的示例。我想做类似的事情,但是我不想在字典上创建和存储dictionary.xml文件,而是希望在服务器启动时通过SQL构建它,并将Document对象保留在Java内存中。然后,我想将字典文档作为参数传递给转换器,以便XSL转换功能可以使用它。但是,它似乎不起作用。

相关的Java代码:

Document dictionary = TranslationDictionary.getDictionaryDocument();
transformer.setParameter("dictionary", dictionary);

词典文件内容:

<dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <translatedString dictionaryId="BASIC_DETAILS">
        <language id="es" value="Detalles B&#225;sicos"/>
    </translatedString >
    <translatedString dictionaryId="VEHICLE_INFORMATION">
        <language id="es" value="Informaci&#243;n del Veh&#237;culo"/>
    </translatedString >
    <translatedString dictionaryId="STRUCTURE">
        <language id="es" value="Estructura"/>
    </translatedString >
    <translatedString dictionaryId="DRIVER_INFORMATION">
        <language id="es" value="Informaci&#243;n del Conductor"/>
    </translatedString >
    <translatedString dictionaryId="MAINTENANCE_AND_FEUL">
        <language id="es" value="Mantenimiento &amp; Combustible"/>
    </translatedString >
    <translatedString dictionaryId="PURCHASING">
        <language id="es" value="Compra"/>
    </translatedString >
</dictionary>

XSL文件:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://www.test.com">
    <xsl:param name="dictionary"/>
    <xsl:param name="language" select="'es'"/>


<xsl:template match="/">
<xsl:message>
    <xsl:copy-of select="$dictionary/dictionary/translatedString[@dictionaryId='BASIC_DETAILS']/language[@id='es']/@value"/>
</xsl:message>

</xsl:template>

但是我什么也没得到。我试过只是复制$ document /
document来确认我没有xpath问题,而事实并非如此,因为那给了我完整文档的副本。就像XSL将$
dictionary视为字符串而不是节点一样。有什么线索吗?


问题答案:

好的,我为您的代码制作了骨架副本。这听起来很奇怪,但是在用Java代码创建字典文档之后,并且在将其设置为转换器的参数之前,只需调用该方法即可:

dictionary.getDocumentElement();

然后就可以了!看起来像是撒克逊人处理文档即参数的方式中的错误,它需要某种尚未完成的初始化?我没有深入研究调试器。



 类似资料:
  • 问题内容: 我读了很多文章,尝试了很多事情,但仍然无法通过xsl在参数中找到值。我从java的sun xalan开始,但是从来没有运行过,所以我改用saxon无济于事。我想将两个xml文档与xls合并为一个。永远不要在文件系统上,这是用于构建xml字符串/ docs的Web应用程序。我尝试将DTMAxisIterator,DomSource,Doc传递给以xsl,字符串设置的Node。在带有xsl

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • 我正在编写一个方法,如果我想将一个类传递给一个方法,其中代码的一部分包括检查对象是否属于某种类型。这就是我想要的(但显然不行): 关于如何做到这一点有什么提示吗?谢谢!

  • 问题内容: 我正在创建一个分页类,需要将两个参数传递给我的LIMIT子句的MySQL存储过程。 我将它们作为INT传递给我,并尝试这样的事情 但是,当我尝试保存该存储过程时,它给了我一个错误。有什么方法可以让我错过吗?还是我必须评估整个查询并执行它? 问题答案: 在5.5.6之前的版本中,无法在MySQL存储过程中进行参数化。您需要动态构建查询并执行它。 在5.5.6及更高版本中,只要将存储的pr

  • ...基本上是代码重复。是否有一种方法可以将函数作为方法参数传递,以优化这一点,使两个筛选条件都有一个方法?

  • 问题内容: 我想将字符串数组作为参数传递给函数。请看下面的代码 代替: 但是如果我这样做,我会收到一条错误消息,指出将其转换为。我想知道是否可以传递这样的值,或者正确的方法是什么? 问题答案: 怎么样: