gpt4 book ai didi

java - 如何将 XML 中的函数式语言转换为 Java?

转载 作者:行者123 更新时间:2023-11-30 05:14:17 26 4
gpt4 key购买 nike

我正在使用基于 XML 模式的 DSL,该模式支持函数式语言功能,例如循环、具有上下文的变量状态以及对外部 Java 类的调用。我想编写一个工具,它接受 XML 文档并将其转换为至少看起来像 Java 的东西,其中 <set>标签被转换为变量赋值,循环被转换为 for循环等等。

我一直在研究 ANTLR 以及标准 XML 解析器,我想知道是否有推荐的方法来解决这个问题。如果不能直接将这样的 XML 文档转换为可转换为 Java 的内容,是否可以?

如果这是推荐的方式,我愿意通过 SAX 编写解析,SAX 根据每个标签编写中间语言,但让我犹豫的部分是它与语言一样基于上下文就像Scheme一样,任何标签的子元素都会在父元素之前被完全评估。

最佳答案

您可以使用 XSLT 来做到这一点。然后只需用来生成您需要的代码片段即可。

(记得将输出格式设置为纯文本)

<小时/>

编辑:示例 XSLT 脚本

输入 - a.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="b.xsl"?>
<set name='myVar'>
<concat>
<s>newText_</s>
<ref>otherVar</ref>
</concat>
</set>

脚本 - b.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="text" />

<xsl:template match="set">
<xsl:value-of select="@name"/>=<xsl:apply-templates/>
</xsl:template>

<xsl:template match="concat">
<xsl:for-each select="*">
<xsl:if test="position() > 1">+</xsl:if>
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>

<xsl:template match="ref">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="s">
<xsl:text>"</xsl:text>
<xsl:apply-templates/>
<xsl:text>"</xsl:text>
</xsl:template>
</xsl:stylesheet>

请注意,a.xml 包含一条指令,允许支持 XSLT 的浏览器使用样式表 b.xsl 呈现它。 Firefox 就是这样一个浏览器。在firefox中打开a.xml,你会看到

myVar="newText_"+otherVar

请注意,XSLT 是一种功能非常强大的编程语言,因此您可以做很多事情。

关于java - 如何将 XML 中的函数式语言转换为 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202372/

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