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

时间:2021-05-21 04:09:12

标签: xml

我必须根据多个数据源(数据库、休息服务)生成 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 之外的任何东西。

任何其他如何呈现来自其他来源的数据的方法也是可以接受的

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您在下面找到了 XSLT 3.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>
相关问题