我想从java应用程序中为indent属性传递参数,如下所示。
我可以毫无问题地从java代码传递它,但在xslt中定义参数是一个问题。 我做了以下示例:
<xsl:param select="'yes'">
<xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="{$indent}" />
但是当我使用上面的内容时,我收到的错误是说我定义属性缩进的方式无效。请帮我解决这个问题。
答案 0 :(得分:2)
带<xsl:param name="indent" select="'yes'"/>
的参数声明是正确的,但并非所有元素的所有属性都允许使用属性值模板。如果我们查看http://www.w3.org/TR/xslt20/#serialization,那么我们会看到这些属性不允许使用属性值模板,否则语法会说例如indent={yes|no}
。
如果要在Java代码中定义缩进,请检查XSLT处理器的API,它可能有一种设置输出序列化设置的方法。
根据您的评论,您使用的是IBM的Websphere XSLT 2.0 API,我没有使用该API的经验,因此以下是尝试阅读API在线文档以建议使用您的自定义序列化的可能方法设置:
XOutputParameters params = yourXSLTExecutableInstance.getOutputParameters();
params.setIndent(true);
List<XItemView> result = yourXSLTExecutableInstance.executeToList(yourJAXPInputSource);
result.get(0).exportItem(yourJAXPStreamResult, params);
这大致是我想尝试的,我没有任何API可供测试。