gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:29:07 25 4
gpt4 key购买 nike

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

我的文字不太好,举个例子更容易明确。所以我的db.xml好像:

<root>
<what name="pete" />
</root>

file.tmpl看起来像(语法组成):
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 的结果内容应该:
This is a scratch-file
whats name is pete

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

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

我没有找到可以实现这一点的模板引擎工具。我研究过使用 yaml/json 作为数据输入,如 mustache、django、pyratemp ......或者不提供像 django-xml 这样的良好外部接口(interface)。

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

最佳答案

确实有许多可用的模板语言可能适合您的需求,但是 SO policy does not allow asking for tools or libraries因为这通常会征求固执己见的答案。

I know: In the end this looks a lot like simplified xslt wrapped into a nice human-readable syntax ;-)



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

也就是说,我认为使用 XML 语言组(XQuery、XSLT、XProc、XPath 等)中的现有工具,您应该能够在不付出太多努力的情况下取得长足的进步。例如:
  • XSLT 3.0 (a list of XSLT 3.0 processors can be found on the XSLT info page) 允许您编写文本值模板,这是嵌入在文本节点中的语法,只需使用大括号即可。以您的示例输入为例:
    <xsl:template match="/" expand-text="yes">
    This is a scratch-file.
    {for $n in /root/what/@name
    return 'whats name is ' || $n}
    {if(not(/root/what/@name)) then 'no whats' else ()}
    </xsl:template>

    或(也是 XSLT 3.0):
    <xsl:template match="/" expand-text="yes">
    This is a scratch-file.
    <xsl:sequence>
    <xsl:for-each select="/root/what/@name">whats name is {$n}</xsl:for-each>
    <xsl:on-empty>no whats</xsl:on-empty>
    </xsl:sequence>
    </xsl:template>
  • 同样对于 XSLT 3.0,您可以将示例输入与 xsl:evaluate 一起使用自动评估模板中的 XPath。这将不需要您的用户理解(部分)XSLT,并允许您在模板中自由使用。但是,您应该定义一种清晰的方式来标记您的 XPath 与其余部分(在您的示例中,使用注释是一种有效的方式,因为您可以简单地通过 comment() 节点进行标记)。
  • 在 XQuery 3.1 中,但这是新闻的热点,您将拥有字符串模板,它比 XSLT 走得更远。使用 XQuery 的另一个优点是它更自然地连接到现有的 XML 数据库。见 this thread for the modified propoposal以及导致它的后续/之前的消息。
  • 使用 XProc,您可以预处理您的模板,自动生成 XSLT,并将此 XSLT 作为处理实际输出的主要样式表。随着新的xsl:initial-template ,设计一个入口点变得微不足道,您可以参数化来自数据库的输入。
  • 关于xml - 带有 xml 输入和 xpath 表达式的 TemplateEngine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171703/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com