XML を解析するクラスを作成したいと考えています。これが私のコードです:
public class ParserXML {
private String Flux;
private ArrayList<String> EvaluateExpr = new ArrayList<String>();
private ArrayList<String> Result = new ArrayList<String>();
public ParserXML(String url, ArrayList<String> exp) {
this.Flux = url;
this.EvaluateExpr = exp;
this.loadXmlFlux();
}
private void loadXmlFlux() {
HttpClient httpclient = null;
try {
httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(this.Flux);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpget, responseHandler);
InputSource docXml = new InputSource(new StringReader(responseBody));
XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
ArrayList<String> result = new ArrayList<String>();
/*
* Looping on all expression to evaluate
*/
for (String i : this.EvaluateExpr) {
try {
result.add(xpath.evaluate(i, docXml));
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
this.Result = result;
} catch (HttpResponseException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
finally{
if(httpclient!=null) {
httpclient.getConnectionManager().shutdown();
}
}
}
public ArrayList<String> getResult() {
return this.Result;
}
}
このクラスは、評価する式が 1 つしかない場合に正常に機能します。しかし、XML ストリームで 2 つの式を評価したい場合、エラーが発生します。
java.io.IOException: com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load の java.io.StringReader.read(不明なソース) で java.io.StringReader.ensureOpen(不明なソース) でストリームが閉じられました(不明なソース) com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity (不明なソース) com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString (不明なソース) com .sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion (不明なソース) com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (不明なソース) com.sun.org.apache .xerces.internal.parsers.XML11Configuration.parse (不明なソース) com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (不明なソース) com.sun.org.apache.xerces.internal.parsers で.DOMParser。parse(未知のソース) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知のソース) at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(未知のソース) at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(不明なソース) の Common.ParserXML.loadXmlFlux(ParserXML.java:56) の Common.ParserXML.(ParserXML.java:29) の Domaine.Ahref .loadReferringDomains(Ahref.java:46) で Domaine.Ahref.(Ahref.java:19) で MainApp.checkAhrefs(MainApp.java:199) で MainApp.main(MainApp.java:67) ------- -------- リンク先 ------------------ com.sun.org.apache.xpath.internal.jaxp の javax.xml.xpath.XPathExpressionException。 XPathImpl.evaluate (不明なソース) com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate (不明なソース) at Common.ParserXML。loadXmlFlux(ParserXML.java:56) で Common.ParserXML.(ParserXML.java:29) で Domaine.Ahref.loadReferringDomains(Ahref.java:46) で Domaine.Ahref.(Ahref.java:19) で MainApp.checkAhrefs( MainApp.java:199) で MainApp.main(MainApp.java:67) 原因: java.io.IOException: java.io.StringReader.ensureOpen(不明なソース) で java.io.StringReader.read(Unknownソース) com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load (不明なソース) com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity (不明なソース) com.sun .org.apache.xerces.internal.impl.XMLEntityScanner.skipString (不明なソース) com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion (不明なソース) com.sun.org.apache.xerces で.internal.parsers。com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (不明なソース) の XML11Configuration.parse (不明なソース) com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (不明なソース) ) com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(不明なソース) com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(不明なソース)
ループで「xpath.evaluate(i, docXml)」を再度使用できない理由がわかりません。
ありがとう