这是我的xml文件
`<common>
<ALL>
<CollectTimestamps>0</CollectTimestamps>
<DefaultDatabaseInstance>ZEH3104</DefaultDatabaseInstance>
</ALL>
</common>`
我的databaseinstance值ZEH3104是硬编码值,值从发布到发布不断变化,我想使用变量而不是硬编码值,我想使用像
这样的shell变量`<DefaultDatabaseInstance>$myShellVariable</DefaultDatabaseInstance>`
echo $ myShellVariable给出了ZEH3104
但这不起作用标签将$ myShellVariable作为标签的值而不是ZEH3104
有什么方法可以让我得到结果。请帮忙。
注意:不应修改标签
答案 0 :(得分:2)
你不能。
Pure XML只保存数据:它不解释任何内容。在您描述的场景中,您必须找到某种方法来修改或重新创建每个版本的XML。最简单的方法可能是编写一个脚本,在模板上运行find-replace,用shell变量替换标签,然后覆盖活动配置XML。
答案 1 :(得分:-1)
实际上,你可以使用Spring和ActiveMQ支持。这里的关键区别是shell变量被截获。在配置LDAP服务,消息传递服务时完成OFTEN,有时用于管理UNIX / Linux脚本。
这个过程非常简单。假设你有一个spring环境设置:首先,找一个支持shell变量重技术的框架。一些例子:Apache ActiveMQ,Quartz,Spring(Quartz)等......
确定其架构并将其包含在beans标记定义中。这是一个例子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://ww.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
xsi:schemaLocation=http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd>
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="urls" value="${ldap.name.url}" />
<property name="base" value="${ldap.name.base}" />
...
</bean>
</beans>
将会拦截shell变量,在XML解析之前,它们的字段将被其匹配值替换。
另一个选择是手动执行,如果您没有或不想拥有Spring环境,则会出现这种情况。此方法排除了对其他框架的任何需求。您可以像任何其他文本文件一样轻松解析XML文件,并使用J2SE搜索任何以$ {开头并以}结尾的值的模式,获取其间的值并将其作为键存储在Properties集合中。关闭内部流,通过将该值存储为键/值对来匹配要填充的值,并打开外部进行写入,使用存储在Properties集合中的匹配键替换所有已识别的模式。
现在,这有效吗?不,我建议使用另一种方法。事实上,你真正想做这样的事情的唯一一次是你创建一个ANT脚本,你使用Java for Linux / UNIX脚本(而不是BASH脚本),或者你需要跨越技术(这是通常是LDAP的情况)。但这是你的解决方案。