1

ノード構造が異なるいくつかのxmlファイルがあります。これらの各 xml ファイルから xml コンテンツを抽出し、前者 (xml コンテンツ) を単一の文字列として保存したいと考えています。

私はそれを達成するために次のコードを使用しています

   String xmlContent = FileUtils.readFileToString(new File("xyz"), "UTF-8");

しかし、私は次のエラーに直面しています

    [Fatal Error] :5616:15: The processing instruction target matching "[xX][mM][lL]" is not allowed.

検索したところ、xmlコンテンツの間に「」が存在するため、前述のエラーが発生することがわかりました。

最初に xml ファイルを変更する必要がありますか、それともこの状況を処理する他の方法がありますか?

4

3 に答える 3

1

テキストエディタを使用してxmlファイルを編集します。最初の行の最初で、先頭のスペースを探して削除します。

xmlの次の最初の行には、行の最初の「<」の前にスペースや文字を含めることはできません。

<?xml version="1.0" encoding="UTF-8"?>

インポートを再試行してください。http://www-01.ibm.com/support/docview.wss?uid=swg21262072を参照してください

于 2012-07-03T09:45:55.517 に答える
0

いくつかの努力をした後、私はコンテンツを単一のxmlファイルに結合しました:)次のメソッドは、xmlエンコーディングノードを削除し、xmlファイルを文字列化します。

 public String stringifyXmlFiles(String fileName) {
        File file = new File(fileName);
    String content = "";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new FileInputStream(file));

        TransformerFactory tranFactory = TransformerFactory.newInstance();
        Transformer aTransformer = tranFactory.newTransformer();
        aTransformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
                "yes");
        aTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
        Source src = new DOMSource(document);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        Result dest = new StreamResult(stream);
        aTransformer.transform(src, dest);
        content = stream.toString();
    } catch (ParserConfigurationException e) {
        logger.error(e.getMessage(), e);
    } catch (SAXException e) {
        logger.error(e.getMessage(), e);
    } catch (IOException e) {
        logger.error(e.getMessage(), e);
    } catch (TransformerConfigurationException e) {
        logger.error(e.getMessage(), e);
    } catch (TransformerException e) {
        logger.error(e.getMessage(), e);
    }
    return content;
   }
于 2012-07-04T03:24:18.580 に答える
0

最初に xml ファイルを変更する必要がありますか ...

はい、そうすべきです。

...そして、この状況を処理する他の方法はありますか?

XML が無効であるという事実を回避してプログラミングを試みることができます。

  • 問題が軽微で孤立している場合は、ファイルを最初にパスして「修正」することを試みることができます。次に、通常の XML パーサーを使用して解析します。

  • 問題が広範囲に及ぶ場合は、XML をテキストとして扱い、適切に解析せずにデータを抽出しようとする可能性があります。

しかし、両方のアプローチの問題は、良い結果を得る試みが失敗したときに、悪いデータや欠落したデータになる可能性があることです。たとえば、XML が別の方法で不適切に変更されたためです。

したがって、私の推奨は、テキスト エディターを使用して手動で XML を修正するか (これが一度だけの場合)、ソースで問題を修正するために作成者を取得することです。


ちなみに、XML 構文の問題を修正すれば、XSLT を使用するだけで XML ファイルの選択とマージを実行できる場合があります。

于 2012-07-03T09:46:40.063 に答える