XML内部的XML如何在Base X中使用

时间:2016-03-23 18:17:55

标签: xml basex

我有一个项目,用于使用Base X软件分析XML文档

我的问题是我的XML文件就像模型一样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
...

换句话说,在这个XML中有很多XML,当我尝试用Base X打开它时,我得到错误:

O destino da instrução de processamento correspondente "[xX][mM][lL]" não é permitido.,大致翻译成英文就是上面的

The instruction destiny of processing "[xX][mM][lL]" isn't allowed.

怎么样?

1 个答案:

答案 0 :(得分:1)

如果你有没有文档声明的简单XML片段,你也可以使用fn:parse-xml-fragment("...");但这不适用于你的情况。

以下XQuery可帮助您拆分输入文件的内容并将其存储在BaseX数据库中。如果您的输入不是太大,并且所有新文档都以文档声明开始(<?xml ...),它应该开箱即用;否则,你将不得不稍微修改一下:

let $lines := unparsed-text-lines('your-input.txt')
let $docs :=
  for tumbling window $doc-lines in $lines
  start $start when true()
  end next $next when starts-with($next, '<?xml')
  return parse-xml(string-join($doc-lines, '&#xa;'))
count $count
let $names :=
  for $doc at $pos in $docs
  return 'doc' || $pos || '.xml'
return db:create('your-database', $docs, $names)