【问题标题】:Converting an configuration file to HTML将配置文件转换为 HTML
【发布时间】:2009-07-15 20:54:20
【问题描述】:

我有一堆配置文件,它们通常是从应用程序打开并像记事本一样编辑的属性文件。现在的要求是选择每个属性并找到它适合的 HTML 标记,并将整个属性文件显示为 HTML 页面. 例如:

Security.Properties 文件

//This property checks if the user has already logged or not
//Possible values Y N

order.security.Login=Y

所以上面的属性有两个可能的值 Y N 。等效的 HTML 格式可以是带有 Y N 的单选按钮。类似地,如果另一个属性取值 1,2,则 HTML 是具有这两个值的 Listbox。

我知道这有点麻烦,但必须这样做。 开发是 JAVA JAVASCRIPT VELOCITY 我的想法是将所有属性文件转换为 XML,然后使用 XSLT 呈现为 HTML。 我想听听更多的想法,包括性能问题。

【问题讨论】:

  • 您需要了解有关每个属性的值集的元数据。您想从 cmets 中提取它吗?
  • 可能是的,我还没有探索这些方法。只是在寻找一些想法。一件事是基于输入值,必须确定标签,所以肯定必须从 cmets 中提取它。是的,现在我已经明白这个问题比我想象的还要复杂。谢谢
  • 如果是两种状态是/否,那么您应该使用复选框而不是单选组。
  • 如果你必须解析 cmets,我看不出有什么办法,除非 cmets 非常严格和规则(即可解析)。

标签: java html properties


【解决方案1】:

我将定义一个 XML 文件,其中列出每个属性键,以及它在 HTML 中的显示方式。

<property key="order.security.Login">
    <display type="radio" values="Y,N" />
</property>

那么,如果您想将 Properties 显示为 HTML 文件,只需使用 XSLT 解析此 XML 文件,使用属性键匹配正确的元素并很好地显示其内容(使用转换 ) 列表中

不知道它是否适合您的应用配置,但这是我的第一个想法。

【讨论】:

  • 但是请不要重新发明 XML 模式。有 Java 工具可用于从 XSD 动态构建编辑器。
【解决方案2】:

就像你说的,XSLT 似乎是要走的路。

【讨论】:

  • 但问题是有大约 1200 个 conf 文件需要更改。这可以扩展吗?
  • 使用正确的模板并且如果您的 XML 也有类似的制作,那么这将只需要 1 个 XSLT 工作表。 XSLT 通常比 DOM 操作更有效。
【解决方案3】:

一个小的 javadoc/c#doc 怎么样:

//<desc>This property checks if the user has already logged or not
//Possible values Y N</desc>
//<type>YN</type>
order.security.Login=Y

【讨论】:

  • JavaDoc之后的下一步是什么。第二部分确定HTML合适标签的问题
【解决方案4】:

如果您有 1200 个文件(哇),那么除了自动化之外我看不到任何其他方法。

如果您可以从填写的属性中计算出可能的值,那么您可以使用不同的解决方案。

所以不能有很多值 如果当前值为 Y,那么唯一可能的答案是 N 与 true 或 false 相同 如果值是其他字符串,则允许输入字符串。

您说您使用 Velocity,因此您的模型可以访问完整的 Java。 将您的属性文件读入一个 Properties 对象,您可以从中获取所有键的枚举。 对于属性文件中的所有值,使用您的速度模板 Velocity 构建您的 html。

Map<String, YourHolderObject> velocityPropertiesValues = 
    new HashMap<>(String, YourHolderObject);

Properties properties = new Properties("your properties file")
Enumeration keys = properties .keys();

while (keys.hasMoreElements()) {
  String key = (String)keys.nextElement();
  String value = (String)p.get(key);
//.......get YourHolderObject which can will have methods like isBoolean, 
// if it is then in velocity create radio buttons etc
}


//then in velocity use that enriched object to decide what html to generate 
#foreach ($key in $properties.keySet())
 #if($refreshed.get($key).isBoolean)
   //generate the radio buttons
 #elseif($refreshed.get($key).isYesNoList)
    //do something else
 #
#end

我相信你明白了。 不要依赖语法,它只是代码来尝试解释看待问题的不同方式。希望能帮助到你。 肖恩

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2018-06-03
    • 2010-11-25
    • 2013-08-24
    • 2013-07-10
    相关资源
    最近更新 更多