如何在xml文件中使用shell变量

时间:2014-06-24 05:44:12

标签: xml shell

这是我的xml文件

`<common>
   <ALL>
      <CollectTimestamps>0</CollectTimestamps>
      <DefaultDatabaseInstance>ZEH3104</DefaultDatabaseInstance>
   </ALL>
</common>`

我的databaseinstance值ZEH3104是硬编码值,值从发布到发布不断变化,我想使用变量而不是硬编码值,我想使用像

这样的shell变量
`<DefaultDatabaseInstance>$myShellVariable</DefaultDatabaseInstance>`

echo $ myShellVariable给出了ZEH3104

但这不起作用标签将$ myShellVariable作为标签的值而不是ZEH3104

有什么方法可以让我得到结果。请帮忙。

注意:不应修改标签

2 个答案:

答案 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的情况)。但这是你的解决方案。