【问题标题】:Providing parameters to XSLT program using Java API使用 Java API 向 XSLT 程序提供参数
【发布时间】:2011-08-22 05:54:46
【问题描述】:

我想做的是:

setParameter(String name, String value)

但 API 是:

void setParameter(QName name, XdmValue value)

我找不到任何示例来正确创建 XdmValue 和 QName,examples I found 都在使用这个函数/api 的不同版本。

【问题讨论】:

    标签: java xslt saxon transformer


    【解决方案1】:

    参数的名称通常不在命名空间中,因此您可以使用构造函数 new QName("p") 构造 QName。如果参数值为字符串,则可以使用new XdmAtomicValue("value") 构造该值。所以你的例子减少到

    setParameter(new QName(name), new XdmAtomicValue(value))
    

    在设计这样的 API 时,必须仔细判断如何平衡为常见简单情况提供“快捷方式”方法所带来的简单性与拥有无数方法所带来的复杂性。所以我提供了new QName(string),但我没有提供setParameter(string, string)

    【讨论】:

    • 我现在正在使用 s9api,很高兴看到新的 setParameter 有一个 xdmvalue 参数,而且我还注意到所有通知 valuerepresentations ...尽管我试图将更复杂的类型传递给xsl,现在我只使用 atomicvalues
    • 一个 XdmNode 是一个 XdmValue,所以你也可以传递一个 XdmNode。如果要传递一系列项目,XdmValue 有一个构造函数,它接受 XdmItem 的集合:每个 XdmItem 可以是 XdmAtomicValue 或 XdmNode。
    • 我猜在 xsl 中您将参数分配给一个变量并使用 xpath $xdmnodeparm/pathtosomexml 访问 xdmnode 中的值
    • 没错,参数只是一个变量,其值为一个节点。
    • 谢谢。因为我的源 xml 文档在 servlet 中是动态的,所以我最终以这种方式传递了所有会话和文档信息
    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2023-03-29
    • 1970-01-01
    • 2011-10-21
    • 2018-11-26
    • 2023-03-05
    相关资源
    最近更新 更多