-1

我的应用程序正在尝试解析 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 文件在我的开发环境和测试环境中都没有产生任何问题。抱歉没有分享文件。这是一个文件,我不应该分享。但是相同的输入文件在我的开发环境中没有产生任何问题。

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

4

3 回答 3

0

我能想到的唯一情况是“R”是无效字符,紧跟在“高代理”之后。但与其让我们猜测,您还需要向我们提供更多信息。

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

于 2012-12-20T08:34:56.203 回答
0

Unicode: 0x52 是大写的 R。我不确定你为什么会收到这个错误。您能否发布您尝试执行的代码或引发此错误的数据示例?

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

于 2012-12-20T08:11:49.810 回答
0

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

[编辑以下问题信息添加]

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

于 2012-12-20T08:10:47.933 回答