XML

2016-03-23 8 views
0

私は、ソフトウェアベースでXML文書を分析することであるプロジェクトを持っているXXML

私の問題は私の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" [ ]> 
... 

言い換えれば、それはこの1つのXML内のXMLがたくさんだ、と私は基本Xでそれを開こうとすると、私はエラーを取得:

O destino da instrução de processamento correspondente "[xX][mM][lL]" não é permitido.、大体英語に翻訳することは上記

です

どのように?

+0

これは整形式のXML文書ではありません。 [file: 'モジュールのread関数](http://docs.basex.org/wiki/File_Module#Read_Operations)に続いて[' fn:parse-xml'](を使用してそれらを分割することができますhttps://www.w3.org/TR/xpath-functions-30/#func-parse-xml)。しかし、誰かがあなたにXML入力を約束した場合、適切で整形式のXMLを送信するように指示します。これはそうではないため、作業が面倒で面倒でエラーが起こりやすいでしょう。 –

+0

ええ、それは面倒なことがわかります。しかし、私には選択肢がありません。これは、このようにしか不能化されるXMLのコレクションです。毎週のように、XMLがあります。その週が終わったら、彼らはそれをすべて1に参加させ、ダウンロードするためにそれを無効にする。私は、バッファ上のいくつかのXMLファイルに解析メソッドを試して、別々のファイルに使うと思います。 〜 – alvarosps

答えて

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)