gpt4 book ai didi

xslt - 在XSLT中动态包含其他XSL文件

转载 作者:行者123 更新时间:2023-12-04 06:25:32 25 4
gpt4 key购买 nike

我有一个小问题,有没有办法动态包含另一个xsl?例如:

<xsl:variable name="PathToWeb" select="'wewe'"/>
<xsl:include href="http://{$PathToWeb}/html/xsl/head.xsl" />
<xsl:include href="http://{$PathToWeb}/html/xsl/navigation.xsl" />
<xsl:include href="http://{$PathToWeb}/html/xsl/promo.xsl" />
<xsl:include href="http://{$PathToWeb}/html/xsl/3columns.xsl" />

<xsl:include href="http://{$PathToWeb}/html/xsl/footer.xsl" />

最佳答案

我以不同的方式解决了这个问题,这可能对使用Java和XSLT的人有用(此解决方案特定于使用javax.xml.transform包的人)。

XSLT转换器工厂允许设置自定义URI解析器。假设您的XSLT看起来像

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" encoding="UTF-8"/>
<xsl:include href="import://stackoverflow.com/xsl"/>
...

URI解析器的 resolve方法将把 import://stackoverflow.com/xsl作为 href参数。 import://可以用作自定义包含的“特殊”标识符方案,因此您可以检测到它并创建/返回指向必需文件的 javax.xml.transform.Source。例如:
TransformerFactory tf = TransformerFactory.newInstance();
URIResolver delegate = tf.getURIResolver();
tf.setURIResolver( new CustomURIResolver( delegate ) );

然后,在 CustomURIResolver内部:
  public Source resolve( String href, String base )
throws TransformerException {
Source result = null;
URI uri = null;

try {
uri = new URI( href );
}
catch( Exception e ) {
throw new TransformerException( e );
}

// The XSLT file has a URI path that allows for a file to be included
// dynamically.
if( "import".equalsIgnoreCase( uri.getScheme() ) &&
"stackoverflow.com".equalsIgnoreCase( uri.getAuthority() ) ) {
result = openTemplate();
}
else {
result = getDelegate().resolve( href, base );
}

return result;
}

添加 openTemplate()方法,该方法包括动态确定要打开的XSL文件的逻辑。

关于xslt - 在XSLT中动态包含其他XSL文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939815/

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