我正在尝试使用$CATALINE_HOME/conf/tomcat-users.xml
脚本bash
将xsltproc
添加到tomcat-users.xml
,如下所示(xsltproc --stringparam username test1 \
--stringparam password test2 \
add-tomcat-user.xslt tomcat-users.xml
是Apache Tomcat 9附带的默认版本) :
<?xml version="1.0"?>
<!-- (unmodified comments -->
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instaance">
<!-- (unmodified comments -->
<user username="$username" password="$password" roles="manager-gui"/></tomcat-users>
几乎使用此输出:
add-tomcat-users.xslt
我的XSLT文件<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:tomcat="http://tomcat.apache.org/xml">
xmlns="http://tomcat.apache.org/xml">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="username"/>
<xsl:param name="password"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tomcat:tomcat-users">
<xsl:copy>
<xsl:apply-templates/>
<user username="$username" password="$password" roles="manager-gui"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如下:
xsl:param
仍有三个问题:
indent="yes"
)?tomcat
)?<xsl:template match="tomcat:tomcat-users">
,一次用作默认命名空间),而http://tomcat.apache.org/xml
仍然成功,输出仍然使用add-tomcat-user.xslt
作为默认值命名空间?那么我怎样才能解决问题(通过将xsltproc
或命令行选项更改为SELECT Store,
SUM(CASE WHEN Month = 1 THEN Revenue ELSE NULL END) AS REVENUE_JAN,
SUM(CASE WHEN Month = 2 THEN Revenue ELSE NULL END) AS REVENUE_FEB,
(SUM(CASE WHEN Weekday = 4 THEN Revenue END) /
COUNT(DISTINCT CASE WHEN Weekday = 4 THEN Date END)
) AS REVENUE_THU,
(SUM(CASE WHEN Weekday = 5 THEN Revenue END) /
COUNT(DISTINCT CASE WHEN Weekday = 5 THEN Date END)
) AS REVENUE_FRI
FROM Table1
GROUP BY Store;
)?
答案 0 :(得分:1)
使用属性值模板<tomcat:user username="{$username}" password="{$password}" roles="manager-gui"/>
设置属性值。您可以简单地使用<user username="{$username}" password="{$password}" roles="manager-gui"/>
,但是在XSLT中给出了默认的名称空间声明。
至于两次不声明相同的命名空间,即使使用XSLT 2.0处理器,您也需要使用两个属性,一个说xpath-default-namespace="http://tomcat.apache.org/xml"
(然后允许你使用<xsl:template match="tomcat-users">...</xsl:template>
),另一个以您的方式(xmlns="http://tomcat.apache.org/xml"
)声明结果元素的默认命名空间。因此,除非您想使用<xsl:template match="*[local-name() = 'tomcat-users' and namespace-uri() = 'http://tomcat.apache.org/xml']">...</xsl:template>
或<xsl:template match="*[local-name() = 'tomcat-users']">...</xsl:template>
,否则我认为没有一种简洁的方法可以避免您拥有的内容。因此,这不会给您带来太多的简化,并且在匹配方面可能效率较低。