如何解析Dropbox上托管的XML文件,以便它不呈现它,而是下载?

Gen*_*kyy 2 xml android android-xmlpullparser

我的目标是从url下载xml文件并解析它.对于实验,我使用下一个xml文件:https: //www.dropbox.com/s/l5qtpcrryuistpk/Adtest.xml

<?xml version="1.0" encoding="UTF-8"> 
<adsettings> 
<adnetwork>AdMob</adnetwork> 
<publisherid>12345</publisherid> 
</adsettings>
Run Code Online (Sandbox Code Playgroud)

首先,我使用以下代码下载它:

URL xmlUrl = new URL(XML_SETTINGS_URL);
HttpURLConnection urlConnection = (HttpURLConnection) xmlUrl.openConnection();
urlConnection.connect();
FileOutputStream fileOutputStream = adContext.openFileOutput(SETTINGS_FILENAME,
                adContext.MODE_PRIVATE);

InputStream stream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];

while (stream.read(buffer) > -1) {
    fileOutputStream.write(buffer);
        }

fileOutputStream.close();
urlConnection.disconnect();
Run Code Online (Sandbox Code Playgroud)

接下来,我试图解析它:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser parser = factory.newPullParser();
File file = adContext.getFileStreamPath(SETTINGS_FILENAME);
FileReader fileReader = new FileReader(file);
System.out.println(fileReader);
parser.setInput(fileReader);
int eventType = parser.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {
    if(eventType == XmlPullParser.START_DOCUMENT) {
       Log.d(TAG, "Start document");
    } else if(eventType == XmlPullParser.START_TAG) {
        Log.d(TAG, "Start tag "+parser.getName());
    } else if(eventType == XmlPullParser.END_TAG) {
        Log.d(TAG, "End tag "+parser.getName());
    } else if(eventType == XmlPullParser.TEXT) {
        Log.d(TAG, "Text "+parser.getText());
    }
    eventType = parser.next();
}
Run Code Online (Sandbox Code Playgroud)

因此,我只收到Start文档,html,head和script,然后是异常:

org.xmlpull.v1.XmlPullParserException: unterminated entity ref (position:TEXT @13:51 in      java.io.FileReader@4287eae8)
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决?先感谢您

kad*_*rud 5

我只在评论中回答了这个问题,所以这里的答案是正确的,所以你的问题可以解决!

如何强制从Dropbox下载文件?

您可以对Dropbox链接URL进行一些简单的修改,以确保浏览器以您希望的方式处理Dropbox链接.

在浏览器中呈现文件

大多数现代Web浏览器都可以自动检测,打开和处理许多文件类型.例如,单击浏览器中的图像链接通常会在浏览器中打开图像,而不是将其下载到桌面.

要绕过预览页面并允许浏览器处理您的文件,在URL中使用dldropbox替换带有dropboxusercontent的www.例如:

https://www.dropbox.com/s/xttkmuvu7hh72vu/MyFile.pdf
Run Code Online (Sandbox Code Playgroud)

变为:

https://dl.dropboxusercontent.com/s/xttkmuvu7hh72vu/MyFile.pdf
Run Code Online (Sandbox Code Playgroud)

强制下载文件或文件夹

使用上面的新直接链接,您可以进一步修改URL以强制浏览器下载文件,而不是本机处理它.要强制下载文件,请附加?dl = 1的直接链接.例如:

https://dl.dropboxusercontent.com/s/xttkmuvu7hh72vu/MyFile.pdf
Run Code Online (Sandbox Code Playgroud)

(请注意,URL以dl.dropboxusercontent.com开头,如上一节中所述.)

变为:

https://dl.dropboxusercontent.com/s/xttkmuvu7hh72vu/MyFile.pdf?dl=1
Run Code Online (Sandbox Code Playgroud)

在浏览器的地址字段中输入新URL,它应自动下载而不是打开文件.

(参考:[从dropbox帮助复制的上述文本] https://www.dropbox.com/help/201/en)