-1

.xlsx ファイルからいくつかの文字列を取得しています (文字列は単純な文字です)。次に、それらの文字列を .xml ファイルに入れようとしています。しかし残念ながら、これらの文字列を「createElement(StringVariableHere)」メソッドに入れると、「org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified.」というエラーが発生します。

この方法で文字列値を取得します。

switch (tempCell.getCellType()) {
    case Cell.CELL_TYPE_STRING:
    String tempColValue = tempCell.getStringCellValue();
}

これは、文字列値を追加しようとする行であり、エラーが発生します。

Element titleChild = doc.createElement(StringVariableHere);

オンラインで見つけた次の方法を使用して、文字列をきれいにしようとしました。

public String stripNonValidXMLCharacters(String in) {
    StringBuffer out = new StringBuffer(); // Used to hold the output.
    char current; // Used to reference the current character.

    if (in == null || ("".equals(in))) return ""; // vacancy test.
    for (int i = 0; i < in.length(); i++) {
        current = in.charAt(i); // NOTE: No IndexOutOfBoundsException caught here; it should not happen.
        if ((current == 0x9) ||
            (current == 0xA) ||
            (current == 0xD) ||
            ((current >= 0x20) && (current <= 0xD7FF)) ||
            ((current >= 0xE000) && (current <= 0xFFFD)) ||
            ((current >= 0x10000) && (current <= 0x10FFFF)))
            out.append(current);
    }
    return out.toString();
}

また、次を使用して有効かどうかを確認しています。文字列を追加すると、false が返されます。

XMLChar.isValidName(StringVariableHere)

お時間をいただきありがとうございました。ステファノス。

4

1 に答える 1

1

Javaで取得した文字列を調べてみましたか? コンソールなどに印刷しますか?

Office ドキュメントの解析で発生した同様の問題を思い出します。パーサー (apache POI) は、xml を壊す無効な文字を Unicode に与えることがありました (1 つの例は改行でした)。

使用しているパーサーはわかりませんが、xml に入力する前に文字列をクリーンアップする必要がある場合があります。

詳細を追加した後に編集します。

どのような xml を書き込もうとしていますか? 例を挙げていただけますか?doc.createElement(StringVariableHere) は、StringVariableHere という名前の要素を作成しようとすることを意味します。IE

<StringVariableHere>there could be something here</StringVariableHere>

いいえ

<aRandomTag>StringVariableHere</aRandomTag>
于 2012-12-04T22:36:51.077 に答える