我有一个项目,用于使用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.
怎么样?
答案 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, '
'))
count $count
let $names :=
for $doc at $pos in $docs
return 'doc' || $pos || '.xml'
return db:create('your-database', $docs, $names)