Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android Studio中使用文档生成器时出现意外标记(<;)_Java_Android_Xml - Fatal编程技术网

Java 在Android Studio中使用文档生成器时出现意外标记(<;)

Java 在Android Studio中使用文档生成器时出现意外标记(<;),java,android,xml,Java,Android,Xml,我正在Android Studio中使用document builder和NodeList解析xml文档。我以前发现xml不正确,并且在文本中没有转义的符号。在处理完这个问题并使用w3 XML验证器仔细检查之后,我仍然收到一个意外的令牌错误: e:“org.xml.sax.SAXParseException:意外标记(位置:TEXT\n\n 601\n…@5262:1 in java.io。StringReader@cd0db4a)" 但是,当我打开xml并查看引用的行时,我没有看到任何被认为是

我正在Android Studio中使用document builder和NodeList解析xml文档。我以前发现xml不正确,并且在文本中没有转义的符号。在处理完这个问题并使用w3 XML验证器仔细检查之后,我仍然收到一个意外的令牌错误:

e:“org.xml.sax.SAXParseException:意外标记(位置:TEXT\n\n 601\n…@5262:1 in java.io。StringReader@cd0db4a)"

但是,当我打开xml并查看引用的行时,我没有看到任何被认为是麻烦的内容:

...  ...
5257 <WebSvcLocation>
5258 <Id>1521981</Id>
5259 <Name>Warehouse: Row 3</Name>
5260 <SiteName>Warehouse</SiteName>
5261 </WebSvcLocation>
5262 </ArrayOfWebSvcLocation>
。。。
5257
5258 1521981
5259仓库:第3排
5260仓库
5261
5262
我还检查了xml中的非打印字符,但没有找到任何字符。以下是我一直使用的代码:

public List<Location> SpinnerXML(String xml){
    List<Location> list = new ArrayList<Location>();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;
    InputSource is;
    String s = xml.replaceAll("[&]"," and ");

    try {
        builder = factory.newDocumentBuilder();
        is = new InputSource(new StringReader(s));
        Document doc = builder.parse(is);
        NodeList lt = doc.getElementsByTagName("WebSvcLocation");
        int id;
        String name,siteName;

        for (int i = 0; i < lt.getLength(); i++) {
            Element el = (Element) lt.item(i);
            id = Integer.parseInt(getValue(el, "Id"));
            name = getValue(el, "Name");
            siteName = getValue(el, "SiteName");

            list.add(new Location(id, name, siteName));
        }

    } catch (ParserConfigurationException e){
    } catch (SAXException e){
        e.printStackTrace();
    } catch (IOException e){
    }

    return list;
}
公共列表SpinnerXML(字符串xml){
列表=新的ArrayList();
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
文档生成器;
输入源为;
字符串s=xml.replaceAll(“[&]”、“and”);
试一试{
builder=factory.newDocumentBuilder();
is=新的输入源(新的StringReader);
文档doc=builder.parse(is);
NodeList lt=doc.getElementsByTagName(“WebSvcLocation”);
int-id;
字符串名称、站点名称;
对于(int i=0;i
我一直试图阅读的XML是托管的

提前感谢您的帮助

似乎对编码做了一些猜测,所以这里有一些东西可以尝试

从中可以看出:

Android注意:Android平台默认(编码)总是UTF-8

引用自

Java在内部将字符串存储为UTF-16

Java在内部将字符串存储为UTF-16,但使用的编码 在外部,“系统默认编码”有所不同

(1) 我最初建议:

is.setEncoding("UTF-8");
(2) 但取代它应该不会有什么坏处:

Document doc = builder.parse(is);
为此:

Document doc = builder.parse(new ByteArrayInputStream(s.getBytes()));
(3) 尝试以下方法:

String s1 = URLDecoder.decode(s, "UTF-8");
Document doc = builder.parse(new ByteArrayInputStream(s1.getBytes()));
注意: 如果您尝试(2)或(3)注释掉:

is = new InputSource(new StringReader(s));

由于它可能会弄乱
字符串s

,您能否共享整个WebVCLocation元素的数据?(可能也存在一个开始标记)。另外,第5262行之后是什么?在5262行之后只有一个空行,否则这就是文档的结尾。我将编辑这个问题,以包含整个WebVCLocation元素。嗯,我将仔细检查您的XML文件是否都正常。您是否使用了正确的编码/行尾/字符集等?是否可以将XML文件托管在某个位置所以我们可以检查一下吗?我已经托管了XML,我尝试了应用您的建议,但我仍然得到了完全相同的错误。我猜InputSource知道编码,问题实际上是更深层次的。感谢您的建议!从我所读到的,最好得到一个原始输入流(越原始越好)不要使用InputSource,不要使用String,数据操作越少越好。这对一些人来说已经解决了这个问题。但是如果数据损坏,我不知道我能做些什么,除非你提供一个坏数据文件示例,以及一个到SpinnerXML方法的函数路径。如果没有它,我就无法复制错误。你测试了一个错误吗nd对xml.replaceAll(“[&]”,“,”和“);”很有信心?另一种可能性。最好将其转储到logcat,如果它不是太大,则另存一个文件。哦,您已经共享了它,很酷。我将查看您的数据,别忘了转储修改过的数据可能会很有用。您不是唯一一个在SAXParser方面有问题的人。获得了数据。我想我(和其他人)是这样的我有足够的时间继续(我应该能够复制它)我不需要。其余的都是编译的。我确实有一种与此无关的生活;O)而且48小时内只睡了3个小时,所以请容忍我;O)。字符串xml是如何到达那里的,我可以复制/修复。小心,如果我发现了什么,你会听到我的消息,祝你好运。老实说,我刚刚超过3000分(感谢你),我希望你能为我们做更多的事情。糟糕的;O)甚至没有徽章;O(严肃地说,我认为我们已经基本消除了UTF8编码问题,所以是时候考虑其他答案了。(1)原始数据不好(2)数据损坏。(3)SAXParser是fubar。。。。