我可能想要解析包含委托的以下XML。
<node>
<text><title>foo fo <BR>bar bar </title></text>
</node>
解析有效。但在委托之后我没有收到任何输出。在该位置无法使用CDATA。
我正在使用以下代码:
urlConnection.getInputStream());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setExpandEntityReferences(false);
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(in);
有没有人有个主意?
提前谢谢!答案 0 :(得分:0)
永远不需要CDATA使用;所以这既不是问题也不是解决方案。但是你怎么知道没有文字呢?您很可能只有多个相邻的文本节点 - 底层解析器通常返回多个文本段(特别是当有实体时)。您可以使用DOM方法“规范化”Element包含的文本内容,以仅使用单个文本节点替换相邻的Text节点。但如果没有这个,你永远不应该假设所有文本都在第一个(也是唯一的)Text节点内。
如果没有节点,解析器Android捆绑包可能是错误的。我认为它们包含旧版本的xpp或其他东西,它可能有问题(与Xerces或Woodstox等更优雅的解析器相比)。但我首先要确保它不仅仅是“隐藏”节点的情况。
答案 1 :(得分:0)
http://code.google.com/p/android/issues/detail?id=2607
我发现,其他人也有类似的问题。 Android 2.0.1和2.1中有Bug。我通过使用sax解析器解决了这个问题。
答案 2 :(得分:0)
我的名字是Divy Dhiman我是一名高级Android开发人员
我已经通过实体或节点aur通过获取依赖于你的文字控制来完成XML解析。
私有类MyAsyncTask扩展了AsyncTask {
@Override
protected String doInBackground(String... abc) {
try {
URL url = new URL(jksbvlds);
URLConnection connection;
connection = url.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection) connection;
int responseCode = httpConnection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK)
{
InputStream in = httpConnection.getInputStream();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document dom = db.parse(in);
Element docEle = dom.getDocumentElement();
NodeList nl = docEle.getElementsByTagName("quote");
if(nl != null && nl.getLength()>0)
{
for(int i = 0; i<nl.getLength();i++ )
{
StockInfo theStock = getStockInformation(docEle);
name = theStock.getName();
yearLow = theStock.getYearLow();
yearHigh = theStock.getYearHigh();
daysLow = theStock.getDaysLow();
daysHigh = theStock.getDaysHigh();
lastTradePriceonly = theStock.getLastTradePriceonly();
change = theStock.getChange();
daysRange = theStock.getDaysRange();
}
}
}
}
catch(MalformedURLException e)
{
Log.d(TAG,"MalformedURLException",e);
}
catch(IOException e)
{
Log.d(TAG,"IOException",e);
}
catch (ParserConfigurationException e) {
Log.d(TAG,"ParserConfigurationException", e);
}
catch (SAXException e) {
Log.d(TAG,"SAXException",e);
}
finally{}
return null;