使用其他来源的数据填充XML的免费解决方案



我必须基于几个数据源(数据库、rest服务(生成XML文档。例如,来自多个公司系统的人员列表persons.xml:

<persons>
<person>
<name></name>
<birthdate></birthdate>
...
</person>
...
</persons>

我不想写太多代码(请不要在任何编程语言中使用循环、条件和流(,也不想使用商业产品。我同意将所有外部数据收集到另一个XML中,例如:data.xml

<data>
<source name="database"> 
<persons>...</persons>   
</source>
<source name="restservice1">
<persons>...</persons>   
</source>
<source name="restservice2">
<persons>...</persons>   
</source>
</data>

我想要一个模板文件来描述如何基于数据文件(data.XML(形成XML文档(persons.XML(——什么技术/产品最灵活?

我读到XSLT在今天已经过时了,我过去对XSLT非常痛苦,所以我想尝试XSLT之外的任何东西。

也可以采用任何其他方法来呈现来自其他来源的数据

XSLT并没有过时,事实上它有一个非常活跃的社区。

避免循环会限制你达到目标。即使不直接添加循环的编程语法,它们也经常在后台调用。

我同意XSLT作为编程语言来自其他语言有点过于陡峭。最好的做法是将源文件视为数据库(即使不是数据库(,但在构建模板查询时会有所帮助。

学习XSLT是值得的。如果你有一些耐心,你会加快速度。选择一种更简单的语言或工具很可能会在以后的模板之旅中给你带来问题。

下面您可以找到XSLT3.0的一部分可以满足您的需求,但它可能与您的要求不完全一样,因为您遗漏了一些信息,例如XML中应该显示什么以及数据应该如何分组。由于没有运行循环,因此代码实际上是硬编码的,并且在需要扩展XML源数据文件时不会有那么多用处。

data.xml

<persons
xmlns:persons="http://www.example.com/1"
>
<person>
<name>Frank</name>
<birthdate>21st of May 2021</birthdate>
</person>
<person>
<name>Anita</name>
<birthdate>5st of May 2021</birthdate>
</person>
</persons>

xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.example.com/0"
xmlns:persons="http://www.example.com/1"
xmlns:males="http://www.example.com/2"
xmlns:females="http://www.example.com/3"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<data>
<source name="database">
<males:persons>
<xsl:value-of select="persons/person[1]"/>
</males:persons>
<females:persons>
<xsl:value-of select="persons/person[2]"/>
</females:persons>
</source>
</data>
</xsl:template>
</xsl:transform>

结果

<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.example.com/0"
xmlns:females="http://www.example.com/3"
xmlns:males="http://www.example.com/2"
xmlns:persons="http://www.example.com/1">
<source name="database">
<males:persons>
Frank
21st of May 2021
</males:persons>
<females:persons>
Anita
5st of May 2021
</females:persons>
</source>
</data>

最新更新