Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将映射的XPath表达式转换为包含关系数据的XML 出身背景_Sql_Xml_Postgresql_Xpath_Map - Fatal编程技术网

Sql 将映射的XPath表达式转换为包含关系数据的XML 出身背景

Sql 将映射的XPath表达式转换为包含关系数据的XML 出身背景,sql,xml,postgresql,xpath,map,Sql,Xml,Postgresql,Xpath,Map,使用XML和XSL创建网站。PostgreSQL数据库的结构表示所需的XML文档。PostgreSQL提供了许多与XML相关的函数,如下所示: 这是一个不同于从XML进入数据库的问题,有很多解决方案 更新:澄清一下,这个问题不需要使用给定URL中列出的XML函数。它涉及一个通用解决方案,该解决方案基于将数据库表和连接条件映射到XPath表达式来创建XML文档 更新:为了进一步澄清,XQuery用于搜索XML文档,就像它们是XPath和SQL之间的交叉数据库一样。我有一个数据库,我想生成一个XML

使用XML和XSL创建网站。PostgreSQL数据库的结构表示所需的XML文档。PostgreSQL提供了许多与XML相关的函数,如下所示:

这是一个不同于从XML进入数据库的问题,有很多解决方案

更新:澄清一下,这个问题不需要使用给定URL中列出的XML函数。它涉及一个通用解决方案,该解决方案基于将数据库表和连接条件映射到XPath表达式来创建XML文档

更新:为了进一步澄清,XQuery用于搜索XML文档,就像它们是XPath和SQL之间的交叉数据库一样。我有一个数据库,我想生成一个XML文档。XML文档的结构应该以映射到表和列的XPath表达式的形式给出,而不是以XML函数的形式给出

问题 我想解决的问题是使用PostgreSQL将表行中的值映射到XPath值。下面的例子说明了这个问题

实例 XPath映射就是这个问题的核心,它类似于:

root               > people
person             > person
person.first_name -> name/first
person.last_name  -> name/last
person.age        -> [@age]
account.person_id => person.person_id
account            > person/account
account.number    -> [@id]
person_id | first_name | last_name | age
      123 | Peter      | Parker    | 18
      456 | James      | Jameson   | 42
account_id | person_id | number
         1 |       123 | 123456789
PERSON表可能类似于:

root               > people
person             > person
person.first_name -> name/first
person.last_name  -> name/last
person.age        -> [@age]
account.person_id => person.person_id
account            > person/account
account.number    -> [@id]
person_id | first_name | last_name | age
      123 | Peter      | Parker    | 18
      456 | James      | Jameson   | 42
account_id | person_id | number
         1 |       123 | 123456789
账户表可能类似于:

root               > people
person             > person
person.first_name -> name/first
person.last_name  -> name/last
person.age        -> [@age]
account.person_id => person.person_id
account            > person/account
account.number    -> [@id]
person_id | first_name | last_name | age
      123 | Peter      | Parker    | 18
      456 | James      | Jameson   | 42
account_id | person_id | number
         1 |       123 | 123456789
使用XPath映射查询数据库将生成以下XML文档:

<people>
  <person age="18">
    <name>
      <first>Peter</first>
      <last>Parker</last>
    </name>
    <account id="123456789" />
  </person>
  <person age="42">
    <name>
      <first>James</first>
      <last>Jameson</last>
    </name>
  </person>
</people>
在本例中,jamesjameson没有帐户,因此最终文档中不包括相应的XML元素帐户

这是一个难题,不需要完全解决。一个能够处理80%映射到简单XML元素和属性的简单表的解决方案就足够了

问题 如何创建一个SQL语句或过程,该语句或过程根据数据库表的映射和一些到XPath或类似对象的连接操作返回XML文档以执行数据转换

是否有任何技术或开源实现已经执行了这些任务

谢谢大家!

相关链接 文章和白皮书 商业软件
它应该使用xml生成函数

postgres=# select xmlelement(name "people", xmlagg(xmlelement(name "person", xmlattributes(age), xmlforest(first_name as first, last_name as last)))) from person;
                                                                      xmlelement                                                                      
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 <people><person age="18"><first>Peter</first><last>Parker</last></person><person age="42"><first>James</first><last>Jameson</last></person></people>
一排

还有其他使用的可能性

postgres=# select table_to_xml('person', true, false, '');
                          table_to_xml                          
────────────────────────────────────────────────────────────────
 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">↵
                                                               ↵
 <row>                                                         ↵
   <first_name>Peter</first_name>                              ↵
   <last_name>Parker</last_name>                               ↵
   <age>18</age>                                               ↵
 </row>                                                        ↵
                                                               ↵
 <row>                                                         ↵
   <first_name>James</first_name>                              ↵
   <last_name>Jameson</last_name>                              ↵
   <age>42</age>                                               ↵
 </row>                                                        ↵
                                                               ↵
 </person>                                                     ↵

(1 row)
下一步应该是将xslt转换为您的目标格式——这里将有更好的xslt专家,应该会有所帮助