gpt4 book ai didi

java - 基于 XML 输入的动态 XML 响应

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:25 25 4
gpt4 key购买 nike

我们正在构建一个 Web 服务,它接受 XML 输入并根据输入提供 XML 响应。输入的 XML 包含带有空值的 XML 结构,空值将根据数据库中的数据替换为实际值。如果用户不需要所有详细信息,可以减少输入 XML 中请求的节点数量。

示例输入 XML

<?xml version="1.0" encoding="UTF-8"?>
<XML>
<RequestHeader>
<id>123</id>
</RequestHeader>
<RequestedElement>
<ABC>
<DEF>
<GHI />
<JKL>
<MNO />
</JKL>
</DEF>
</ABC>
</RequestedElement>
</XML>

响应示例

<XML>
<ABC>
<DEF>
<GHI>Value1</GHI>
<JKL>
<MNO>Value2</MNO>
</JKL>
</DEF>
</ABC>
</XML>

我现在实现的方法是将 XML 节点映射到表名和列名,然后使用反射从数据库检索数据并生成 XML。然而,使用反射会减慢整个过程。

我能想到的另一个选择是摆脱反射并创建包含所有节点的 XML,然后使用 XSLT 生成仅包含请求的节点的最终 XML。使用 XSLT 可以做到这一点吗?

是否有更好的选择来执行相同的操作,可以提高性能并获得所需的结果?

最佳答案

We are building a web service which takes an XML input and provides and XML response based on the input. The input XML contains the XML structure with empty value, the empty values will be replaced by the actual value based on the data in the database. The user can reduce the number of nodes requested in the input XML, if they do not want all the details

实现此目的的一种方法是调用选定的 XSLT 处理器(不同 XSLT 处理器的执行方式有所不同 - 请阅读文档),向其传递全局转换参数,其名称是应接收相应值的元素的名称。

在下面的转换中,参数的值是硬编码的,但在实际实现中,这些值必须由调用者提供——因此在 XSLT 代码中,它们将如下所示:

 <xsl:param name="GHI"/>
<xsl:param name="MNO"/>

这是完整的转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:param name="GHI">Value1</xsl:param>
<xsl:param name="MNO">Value2</xsl:param>

<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="RequestHeader"/>

<xsl:template match="*[not(node()) and name() = document('')/*/xsl:param/@name]">
<xsl:copy>
<xsl:value-of select="document('')/*/xsl:param[@name = name(current())]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<XML>
<RequestHeader>
<id>123</id>
</RequestHeader>
<RequestedElement>
<ABC>
<DEF>
<GHI />
<JKL>
<MNO />
</JKL>
</DEF>
</ABC>
</RequestedElement>
</XML>

产生了想要的结果:

<XML>
<RequestedElement>
<ABC>
<DEF>
<GHI>Value1</GHI>
<JKL>
<MNO>Value2</MNO>
</JKL>
</DEF>
</ABC>
</RequestedElement>
</XML>

关于java - 基于 XML 输入的动态 XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59243836/

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