【问题标题】:No solution to validate XML against XSD in Android没有在 Android 中针对 XSD 验证 XML 的解决方案
【发布时间】:2017-07-05 08:51:37
【问题描述】:

我正在尝试针对 Android 设备上的 XSD 验证 XML 文件。

我搜索了很多,找到了一些解决方案,例如 xerces-for-android。 在堆栈溢出中,我发现了一些类似this 的页面,它建议避免使用javax.xml。验证并为此目的使用 Xerces。

我在不同的Android APIs(17, 20,25) 中对其进行了测试,但不幸的是我没有成功。

能否请您帮帮我并建议一种替代方法。

【问题讨论】:

    标签: xml validation xsd xerces xmlschemaset


    【解决方案1】:

    1 - 转到https://code.google.com/archive/p/xerces-for-android/

    2 - 单击左侧菜单中的源代码和中间页面的源代码。

    3 - 点击下载代码并解压 zip 内容。

    4 - 在提取的内容中导航到文件夹“xerces-for-android/trunk/src”。

    5 - 复制您的 [AndroidApp|AndroidModule] "src/main/java" 目录中的文件夹 "mf"。

    6 - 现在您必须在“src/main”目录中创建一个名为“resources”的文件夹。这可以在 Android Studio 中完成(右键单击您的模块/应用程序 -> 新建 -> 文件夹 -> Java 资源文件夹)。

    7 - 在该文件夹中,您必须创建下一个文件夹结构:
    mf/org/apache/xerces/impl/msg
    &
    mf/org/apache/xerces/impl/xpath/regex

    8 - 从此目录内的等效提取内容文件夹中复制扩展名为“.properties”的文件。


    当您使用 XSD 验证 XML 文件时

    SchemaFactory factory = new XMLSchemaFactory();
    Source schemaFile = new StreamSource( /*Input stream to your schema*/ );
    Source xmlSource = new StreamSource( /*Input stream to your xml source*/ );
    Schema schema = factory.newSchema(schemaFile);
    Validator validator = schema.newValidator();
    validator.validate(xmlSource);
    

    不要使用 SDK 导入并使用 mf... 包。

    import mf.javax.xml.transform.Source;
    import mf.javax.xml.transform.stream.StreamSource;
    import mf.javax.xml.validation.Schema;
    import mf.javax.xml.validation.SchemaFactory;
    import mf.javax.xml.validation.Validator;
    import mf.org.apache.xerces.jaxp.validation.XMLSchemaFactory;
    

    编辑回复评论。

    当我在寻找有关如何在 Android 中使用 Xml Schema 验证 Xml 文档的信息时,我偶然发现了有关该项目的 cmets,尽管它只包含一个 zip 文件而没有文档。

    我查找了一个有提交的存储库,并找到了这个 https://github.com/MaTriXy/xerces-for-android,最后一次提交是在 4 年前进行的。

    复制资源中的.java文件而不是.profile后,抛出异常,说找不到.profile,查找新信息,我看到.profile必须在资源文件夹中安卓工作室。

    可能,这是一个假设,该项目是 Eclipse/Ant 的 jar,现在不适用于 AndroidStudio/Gradle。

    您可以创建一个 .aar。在您的项目中创建一个 Android 库模块,执行相同的步骤并编译应用程序以进行发布。

    在您的项目中,在目录中。

    /Yourproject/yourmodule/build/outputs/aar/

    会有一个名为 yourmodule-release.arr 的文件,您应该可以使用该包并删除该模块。

    寻找信息我还找到了有关 jarjar 的信息,这似乎是一个以更简单的方式进行这种改编的项目。

    https://github.com/shevek/jarjar

    祝你有美好的一天。

    【讨论】:

    • 非常感谢您的完美回答。有没有办法在Lib中使用jar文件而不是复制文件夹???
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2011-10-12
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多