解析Xml会抛出一个奇怪的无效charecter异常

时间:2012-12-20 07:59:03

标签: xml xml-parsing

我的应用程序正在尝试解析XML,并抛出以下异常,

  

在文档的元素内容中找到了无效的XML字符(Unicode:0x52)。

我100%确定XML是有效的。但我仍然不知道为什么我会得到这个例外。

关于可能导致此异常的原因的任何想法?

我用来读取xml文件的代码是:

String policyFile = filename;
    try {
        String overRide = System.getProperty("TEST_POLICY_FILE");
        if (overRide != null) {
            policyFile = overRide;
        }

        //          URL urlToPolicyFile = new URL(policyFile);
        //          InputStream is = urlToPolicyFile.openStream();
        //InputStream is = getClass().getClassLoader().getResourceAsStream(policyFile);
        // get XML Parser instance
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setIgnoringComments(true);
        factory.setValidating(false);
        DocumentBuilder builder = factory.newDocumentBuilder();
        builder.setEntityResolver(VacEntityResolver.getInstance());
        InputSource inputSource = new InputSource(policyFile);
        // parse input file
        Document policyDocument = builder.parse(inputSource);
        Builder policyBuilder = new Builder();

        // load decl-policies file into cache
        visitDeclarativePolicies(policyDocument, policyBuilder);
        m_myPolicyCache = policyBuilder.getPolicyCache();
    } catch (SAXException e) {
        throw new InvalidPolicyFileException(policyFile);
    } catch (ParserConfigurationException e) {
        throw new InvalidPolicyFileException(policyFile);
    } catch (IOException e) {
        throw new InvalidPolicyFileException(policyFile);
    }

这一行,

Document policyDocument = builder.parse(inputSource);

是抛出错误的那个

关于这个问题的一个有趣的事实是,它只发生在生产环境中。同样的Xml文件既不会在我的开发环境中也不会在测试环境中产生任何问题。很抱歉没有共享文件。这是一个文件,我不应该分享。但是相同的输入文件在我的Dev环境中没有产生任何问题。

这个问题对我来说似乎很奇怪,因为它为字符0x52抛出异常,即'R'。

3 个答案:

答案 0 :(得分:0)

通常最好提供更多输入(例如发布仍然显示该行为的输入的最小化版本),但是从你给出的内容开始,可能会出现小写r与大写R(这会让你认为这是有效的,但严格的语法检查会将其标记为无效)

[编辑以下问题信息]

开发/生产差异的嫌疑人是操作系统的差异。你的机器是Unix和Production Windows还是其他方式?在这些情况下,操作系统创建和读取文件的方式可能会影响您获得的内容,并且解析可能会有所不同。

答案 1 :(得分:0)

Unicode:0x52是大写字母R.我不确定为什么会出现此错误。你能否发布你想要执行的代码或者抛出这个错误的数据样本?

http://www.utf8-zeichentabelle.de/unicode-utf8-table.pl?names=-&utf8=0x

答案 2 :(得分:0)

我能想到“R”将成为无效字符的唯一情况是紧跟“高代理人”。但是,不要让我们猜测,你需要向我们提供更多信息。

根据我的经验,我会说“100%确定”你的XML是有效的,当你的解析器告诉你它不是时,并不是解决问题的最佳起点。