0

私は(Java + Saxon S9APIを使用して)Saxon XSLT2プロセッサでxmlを変換し、ソースとしてxml-documentsを処理する必要があります。これには、タグ名として無効な文字が含まれているため、ドキュメントビルダーで解析できません。

例:

<A>
   <B />
   <C>
      <D />
   </C>
   <E!_RANDOM_ />
   < />
</A>

コード:

import net.sf.saxon.s9api.*;

[...]

/* XSLT Processor & Compiler */
proc = new Processor(false);

/* build document from input*/
XdmNode source = proc.newDocumentBuilder().build(new StreamSource(input));

エラー:

Error on line X column Y 
SXXP0003: Error reported by XML parser: Element type
"E" must be followed by either attribute specifications, ">" or "/>".

感嘆符スペースであるタグ名は、現在私の唯一の無効なタグです。(フォーマットされた)xmlの行全体を削除するだけでなく、より堅牢なソリューションを探しています。

気が遠くなると、無効な文字列を識別するための正規表現を思い付くことができましたが、属性と子ノードを含むノードの削除に苦労しました。

ご協力ありがとうございました!

4

1 に答える 1

2

入力に無効なタグが含まれている場合、それはXMLではありません。これらをXMLドキュメントではなく非XMLドキュメントと呼ぶことで、考え方を正しく理解するのが最善です。これは、非XMLドキュメントを処理するには、非XMLツールが必要であることを明確にするのに役立ちます。(「ノード」については忘れてください。ドキュメントが解析されるまでノードはありません。また、整形式のXMLに変換するまで解析できません)。非XMLをXMLに変換するには、通常、Perlなどのテキスト操作に優れた非XMLツールを使用する必要があります。もちろん、ソースで問題を修正する方がはるかに優れています。人々がプライベートな非XML形式でデータを生成すると、XMLのすべての利点が失われます。

于 2012-04-25T15:19:09.147 に答える