【问题标题】:Parsing Xml is throwing a weird invalid charecter exception解析 Xml 抛出一个奇怪的无效字符异常
【发布时间】:2012-12-20 07:59:03
【问题描述】:

我的应用程序正在尝试解析 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”抛出异常。

【问题讨论】:

    标签: xml xml-parsing


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我用更多信息更新了我的帖子。请看一看。
    【解决方案2】:

    我能想到的唯一一种情况是“R”是无效字符,紧跟在“高代理”之后。但是,您需要给我们更多信息,而不是让我们猜测。

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

    【讨论】:

    • 嗨,Kay,我之所以说 XML 是有效的,是因为在开发环境中使用了相同的 XML,并且不会产生任何问题。它仅在生产机器中发生。我也没有在输入文件中看到任何“高代理”。
    • 好吧,既然你不准备分享你的 XML,我真的不能评论它有什么问题。事实上,要么是 XML 错了,要么是解析器错了,而且你还没有告诉我们 XML 是什么,或者你使用的是什么解析器,所以你让我们胡乱猜测。
    【解决方案3】:

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

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

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

    【讨论】:

    • 感谢您的回复。我用更多信息更新了我的帖子。请看一看。
    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多