Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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
如何使用eXist数据库中使用的XQuery文件将CSV数据添加到现有的XML中_Csv_Xquery_Exist Db - Fatal编程技术网

如何使用eXist数据库中使用的XQuery文件将CSV数据添加到现有的XML中

如何使用eXist数据库中使用的XQuery文件将CSV数据添加到现有的XML中,csv,xquery,exist-db,Csv,Xquery,Exist Db,我正在研究eXist数据库,我有一个新想法,我必须使用XQuery实现XML文件 我想将CSV文件转换为已在数据库集合中的XML。这个XML文件只包含必要的标记和信息。转换后的数据将保存到eXist数据库中的XML中 XML如下:其名称为“createXML.XML” <?xml version="1.0" encoding="UTF-8"?> <records> // All the Records from CSV file want to put here.....

我正在研究eXist数据库,我有一个新想法,我必须使用XQuery实现XML文件

我想将CSV文件转换为已在数据库集合中的XML。这个XML文件只包含必要的标记和信息。转换后的数据将保存到eXist数据库中的XML中

XML如下:其名称为“createXML.XML”

<?xml version="1.0" encoding="UTF-8"?>
<records>
// All the Records from CSV file want to put here..... between Records tags
</records>
这样的输出

<?xml version="1.0" encoding="UTF-8"?>
<records>
   <user>
       <name>krunal</name>
       <subject>maths</subject>
       <marks>95</marks>
   </user>
   <user>
       <name>abc</name>
       <subject>sub1</subject>
       <marks>87</marks>
   </user>
   <user>
       <name>def</name>
       <subject>sub2</subject>
       <marks>67</marks>
   </user>
      .
      .
      .
</records>

克鲁纳尔
数学
95
abc
sub1
87
def
sub2
67
.
.
.

有谁能告诉我如何使用eXist数据库中的XQuery将CSV数据添加到现有的XML中并执行此功能。

要阅读文件,请查看您的XQuery实现文档,这里

let$csv:='姓名,教员
艾丽斯,人类学
鲍勃,生物学
让$line:=标记化($csv,'\n')
让$head:=标记化($line[1],','))
let$body:=删除($line,1)
返回
{
对于$body中的$line
让$fields:=标记化($line,,'))
返回
{
对于$head中的$pos处的$key
let$value:=$fields[$pos]
返回
元素{$key}{$value}
}
}

另一种可能是使用另一个具有内置csv导入支持的XQuery引擎,如或。

要读取文件,请查看您的XQuery实现文档,如下所示

let$csv:='姓名,教员
艾丽斯,人类学
鲍勃,生物学
让$line:=标记化($csv,'\n')
让$head:=标记化($line[1],','))
let$body:=删除($line,1)
返回
{
对于$body中的$line
让$fields:=标记化($line,,'))
返回
{
对于$head中的$pos处的$key
let$value:=$fields[$pos]
返回
元素{$key}{$value}
}
}
另一种可能是使用另一个具有内置csv导入支持的XQuery引擎,如或。

假设(1)您的csv文件已在数据库中,并且(2)您希望将csv转换为XML的结果存储在新的XML文件中,那么XQuery有三个部分:

  • 使用和获取CSV文件的内容 . 请注意,util:binary-to-string()假定该文件使用UTF-8编码,但如文档所示,如果您的CSV文件使用非UTF-8编码,您可以告诉函数编码方案
  • 使用上的XQuery Wikibook文章(已在@Ranon的回复中提到)将CSV转换为所需的结构。我假设您了解足够多的XQuery,可以将此例程调整到您自己的函数中—我将在下面称之为local:csv-to-xml()
  • 使用函数将生成的XML存储在数据库中
  • (请注意,util和xmldb模块是特定于eXist数据库的模块,因为XQuery规范不包含此功能。如果使用不同的XQuery实现,则需要使用它们特定于实现的方法。)

    下面是eXist db解决方案:

    let $csv-file := '/db/myCSV.csv'
    let $csv-binary := util:binary-doc($csv-file)
    let $csv := util:binary-to-string($csv-binary)
    let $xml := local:csv-to-xml($csv)
    return
        xmldb:store('/db', 'createXML.xml', $xml)
    
    这将把转换后的myCSV.csv版本作为createXML.xml存储在eXist数据库的根目录下:/db/createXML.xml

    相反,如果您希望将XML结果附加到现有XML文件中,则需要应用XQuery更新语法,该语法允许您在存储在数据库中的文档中插入节点、替换节点和删除节点。在eXist数据库中,eXist的XQuery更新语法的文档位于。

    假设(1)您的CSV文件已经在数据库中,并且(2)您希望将CSV转换为XML的结果存储在新的XML文件中,那么XQuery有3个部分:

  • 使用和获取CSV文件的内容 . 请注意,util:binary-to-string()假定该文件使用UTF-8编码,但如文档所示,如果您的CSV文件使用非UTF-8编码,您可以告诉函数编码方案
  • 使用上的XQuery Wikibook文章(已在@Ranon的回复中提到)将CSV转换为所需的结构。我假设您了解足够多的XQuery,可以将此例程调整到您自己的函数中—我将在下面称之为local:csv-to-xml()
  • 使用函数将生成的XML存储在数据库中
  • (请注意,util和xmldb模块是特定于eXist数据库的模块,因为XQuery规范不包含此功能。如果使用不同的XQuery实现,则需要使用它们特定于实现的方法。)

    下面是eXist db解决方案:

    let $csv-file := '/db/myCSV.csv'
    let $csv-binary := util:binary-doc($csv-file)
    let $csv := util:binary-to-string($csv-binary)
    let $xml := local:csv-to-xml($csv)
    return
        xmldb:store('/db', 'createXML.xml', $xml)
    
    这将把转换后的myCSV.csv版本作为createXML.xml存储在eXist数据库的根目录下:/db/createXML.xml


    相反,如果您希望将XML结果附加到现有XML文件中,则需要应用XQuery更新语法,该语法允许您在存储在数据库中的文档中插入节点、替换节点和删除节点。在eXist数据库中,eXist的XQuery更新语法的文档位于。

    请不要进行手动代码标记,为此使用标记功能。节省一点,这会使阅读问题变得更困难。对于您的问题:我想注释不会出现在csv文件中,因为这不是常见的做法(而且它将属于最后一个标题字段)。请不要手动进行代码标记,使用标记功能。节省一点,这会使阅读问题变得更困难。对于您的问题:我猜注释不会出现在csv文件中,因为这不是常见的做法(它将属于最后一个标题字段,
    let $csv-file := '/db/myCSV.csv'
    let $csv-binary := util:binary-doc($csv-file)
    let $csv := util:binary-to-string($csv-binary)
    let $xml := local:csv-to-xml($csv)
    return
        xmldb:store('/db', 'createXML.xml', $xml)