首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有xml输入和xpath表达式的TemplateEngine

带有xml输入和xpath表达式的TemplateEngine
EN

Stack Overflow用户
提问于 2015-10-16 13:26:38
回答 1查看 140关注 0票数 2

坦率地说,我正在搜索一个离线模板引擎,以便使用xpath语法将xml-数据库中的信息应用到特殊的文本文件中。

我不太擅长文字,用一个例子来说明更容易。所以我的db.xml看起来是:

代码语言:javascript
复制
<root>
    <what name="pete" />
</root>

file.tmpl看起来类似于(组成的语法):

代码语言:javascript
复制
This is a scratch-file.
<!--(for n in '/root/what/@name')-->
   whats name is @!n!@
<!--(else)-->
   no whats...
<!--(end)-->

因此,在调用./tool -x db.xml -t file.tmpl > file之后,file的结果内容应该是:

代码语言:javascript
复制
This is a scratch-file
   whats name is pete

当然,我希望在xpath返回变量上下文中的非字符串时出现异常,例如,@!!@等等。我正在寻找数据和模型的安全性,而不是性能或方便。

我知道:最后,这看起来很像简化的xslt,包装成一个很好的人类可读的语法;-)

我没有找到一个模板引擎工具来实现这一点。所有我看过的yaml/json作为数据输入,如胡子,django,pyratemp。或者不提供像django-xml这样的良好外部接口。

我可以开始滚动我自己,但这感觉只是没有意义,有这么多的模板引擎已经!是否有任何指针或输入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-16 15:07:42

确实有许多可用的模板语言可以满足您的需要,但是因此,策略不允许询问工具或库。因为它通常会征求意见性的答案。

我知道:最后,这看起来很像简化的xslt,包装成一个很好的人类可读的语法;-)

我个人认为XSLT非常具有人类可读性,因为它使用了XML,而XML本身就是为人类所设计的。但当然,这只是一个意见问题。

尽管如此,我认为在XML语言组(XQuery、XSLT、XProc、XPath等)中,使用现有的工具,您应该能够在不花费太多精力的情况下获得很长的一段路。例如:

  • XSLT3.0 (XSLT3.0处理器的列表可以在XSLT信息页面上找到)允许您使用大括号编写文本值模板,这是嵌入在文本节点中的语法。以您的示例输入: 这是一个划痕文件。{对于/root/what/@name中的$n,返回的是什么,名称是什么,{如果(不(/root/什么/@ name )),那么“not”whats ()} 或者(也是XSLT3.0): 这是一个划痕文件。 什么名称{$n} 没有
  • 同样,使用XSLT3.0,您可以使用带有xsl:evaluate的示例输入来自动计算模板中的XPath。这样就不需要您的用户理解(一些) XSLT,并且允许您在模板中拥有所有的自由。但是,您应该定义一种清晰的方式将您的XPath从其余部分标记出来(在您的示例中,使用注释是一种可行的方法,因为您可以通过comment()节点简单地对其进行标记)。
  • 在XSLT3.1中,这是一个热门的媒体,您将有字符串模板,这些模板比XQuery要深入得多。使用XQuery的优点还在于它更自然地连接到现有的XML数据库。请参阅这条螺纹用于修饰前浆膜。和导致它的以下/前面消息。
  • 使用XProc,您可以预处理模板,自动生成XSLT,并将此XSLT作为处理实际输出的主要样式表。使用新的xsl:initial-template,设计一个入口点变得非常简单,并且可以参数化来自数据库的输入。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33171703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档