gpt4 book ai didi

tomcat - 使用 xsltproc(XSL 样式表)将用户添加到 tomcat-users.xml

转载 作者:行者123 更新时间:2023-11-28 22:51:15 25 4
gpt4 key购买 nike

我正在尝试将 Tomcat 用户添加到 $CATALINE_HOME/conf/tomcat-users.xmlbash带有 xsltproc 的脚本如下(tomcat-users.xml 是 Apache Tomcat 9 附带的默认版本):

xsltproc --stringparam username test1 \
--stringparam password test2 \
add-tomcat-user.xslt tomcat-users.xml

几乎使用此输出:

<?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>

我的 XSLT 文件 add-tomcat-users.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 参数。为什么(尽管 xsl:param)?
  • 插入元素的缩进不对?为什么(尽管 indent="yes")?
  • 我能否避免在 tomcat 时必须定义相同的命名空间两次(一次用于前缀 <xsl:template match="tomcat:tomcat-users">,一次作为默认命名空间)仍然成功并且输出仍然使用 http://tomcat.apache.org/xml作为相同的默认命名空间?

那么我怎样才能保留那些解决问题的方法(通过将我的 add-tomcat-user.xslt 或命令行选项更改为 xsltproc )?

最佳答案

使用属性值模板<tomcat:user username="{$username}" password="{$password}" roles="manager-gui"/>设置属性值。您可以简单地使用 <user username="{$username}" password="{$password}" roles="manager-gui"/>但是在 XSLT 中给出了默认的命名空间声明。

至于不声明同一个 namespace 两次,即使使用 XSLT 2.0 处理器,您也需要使用两个属性,一个表示 xpath-default-namespace="http://tomcat.apache.org/xml" (这将允许您使用 <xsl:template match="tomcat-users">...</xsl:template> ),另一个以您的方式声明结果元素的默认 namespace ( 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> .因此,这不会给您带来太多的简化,并且在匹配方面可能效率较低。

关于tomcat - 使用 xsltproc(XSL 样式表)将用户添加到 tomcat-users.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064948/

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