XML的替代方案,也支持表达式/方法

时间:2011-08-02 04:30:46

标签: java xml language-agnostic markup

我们有一个有趣的问题。我们是一家印刷公司,允许用户根据各种第三方来源打印模板材料。一个例子是查看待售房屋的细节,并将这些价值注入该房屋的小册子中。

目前,我们的模板是在xml文件中定义的。文本标签的一个属性是在我们的系统中调用的方法名称,以获取所需的自动填充值。由于后端是用Java编写的,我们使用反射来查找用户传入的一些对象中的方法。作为一个例子,它看起来像这样......

    <PagePart>
        <profileTag>**getAddress**</profileTag>
        <text>123 Example St NW</text>
        <fontFile>Helvetica.TTF</fontFile>
        <fontName>Helvetica</fontName>
        <fontStyle>0</fontStyle>
        <fontAlignment>0</fontAlignment>
        <fontSize>18</fontSize>
        <positionLeft>19</positionLeft>
        <positionTop>88</positionTop>
        <Color>
            <r>0</r>
            <g>130</g>
            <b>200</b>
        </Color>
        <visibility>false</visibility>
    </PagePart>

profileTag中的getAddress是我们系统中初始化模板的新实例时调用的方法。当我们添加新模板时,我们需要像这样构建花式字符串

 public String getBusinessPhoneWithTitle() {
        if (!phone.isEmpty()) return "B  " + phone;
        else return "";
    }

我们计划拥有数千个模板(目前数百个),这些仅用于支持一个或两个模板的“格式化”方法正在失控。我们需要一种方法让元素通过我们发明的脚本语言或我们发现的脚本语言来包含实际逻辑。

我想知道的是,是否有人知道具有对象文字符号的脚本语言可以在同时提供可评估代码的同时替换标记的XML。如果没有,你会用什么语言粉碎到评估动态表达式的元素?

4 个答案:

答案 0 :(得分:1)

您可以将Velocity模板与java一起使用来构造xml。你可以在你的应用程序中构建一个Pure java api。主页是:http://velocity.apache.org/

答案 1 :(得分:1)

查看Latex [wiki]。

答案 2 :(得分:1)

您是否考虑过使用XPath作为脚本语言?我已经看到应用程序非常成功地使用像您这样的XML结构用于固定部分,然后为需要计算的事物(例如,利率或汇率)嵌入XPath表达式。您可以通过在访问它们时(通过Java或使用evaluate()扩展从XSLT评估XPath表达式)来执行处理,或者您可以将整个文档转换为XSLT样式表,然后有效地评估自身。

答案 3 :(得分:0)

您是否计划根据模板发布不同格式的文档? Quark express似乎是一个更好的选择。我知道许多印刷企业的人使用它。