HTML テーブルのコンテンツを解析して CSV に書き込もうとしています。StaX パーサーを試しています。html には&nbps'
、およびのようなエスケープ文字が含まれています。&
私はorg.apache.commons.lang3.StringEscapeUtils
、html を 1 行ずつ usescape し、新しいファイルに書き込むために使用しています。
StAX は、エスケープされていない文字をまだ解析できません。
この例外の修正または処理を手伝ってください。
以下のxmlフラグメントでテストします-
<root><element>A B </element></root>
以下のコードを呼び出して、html をアンエスケープします -
StringEscapeUtils.unescapeHtml4(escapedHtml)
そしてそれをファイルに書き込みます。
次に、Stax Parser を使用してそのファイルを解析しようとします -
public void unescapeHtmlFile(String filePath) throws IOException{
BufferedReader fileReader = null;
BufferedWriter fileWriter = null;
try{
fileReader = new BufferedReader(new FileReader(filePath));
fileWriter = new BufferedWriter(new FileWriter("./out/UnescapedHtml.html"));
String line = null;
String unescapedLine = null;
while((line=fileReader.readLine())!=null){
System.out.println("Before: " + line);
unescapedLine = StringEscapeUtils.unescapeHtml4(line);
System.out.println("After: " + unescapedLine);
fileWriter.newLine();
fileWriter.write(unescapedLine);
}
}finally{
fileReader.close();
fileWriter.close();
}
}
そして、出力は以下のとおりです-
Document started
<?xml version="null" encoding='UTF-8' standalone='no'?>
Element started
<root>
Element started
<element0>
Characters
0123456 7890 ABC DEF
Element ended
</element0>
Element started
<element1>
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,66]
Message: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:596)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83)
at parser.StreamParserTest.main(StreamParserTest.java:30)
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,66]
Message: XML document structures must start and end within the same entity.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83)
at parser.StreamParserTest.main(StreamParserTest.java:30)
Please helpのエスケープされていない値を解析できません。