【问题标题】:Xerces-C XSModel port from Java来自 Java 的 Xerces-C XSModel 端口
【发布时间】:2020-03-27 09:07:37
【问题描述】:

我正在尝试使用 Xerces v3.2.2 移植一些 Java 代码,该代码加载模式文件、检索 XSModel* 并将其解析为一些自定义数据结构。

JAVA

import org.apache.xerces.XSLoader;
import org.apache.xerces.XSModel;

XSImplementation xsLoader = null;
XSLoader xsLoader = null;
XSModel xsModel = null;

xsImpl = (XSImplmentation) domRegistry.getDOMImplementation("XS-Loader");
xsLoader = xsImpl.createXSLoader(null);
xsModel = xsLoader.loadURI("path-to-schema.xsd");
myDataStruct = new MyDataStruct(xsModel);

我在 Xerces-c 文档中找不到任何会产生类似结果的内容。据我所知,我可以通过xercesc::GrammarResolver* 通过xercesc::AbstractDOMParser 访问XSModel*,但这需要我从解析器派生,因为它是一个受保护的函数。

CPP

#include <xercesc/parsers/XercesDOMParser.hpp>

using namespace xercesc;

class MyDOMParser : public XercesDOMParser
{
public:
    using AbstractDOMParser::getGrammarResolver;
};    

int main()
{
    XMLPlatformUtils::Initialize();

    MyDOMParser parser;
    parser.loadGrammar("path-to-schema.xsd", Grammar::GrammarType::SchemaGrammarType);
    auto resolver = parser.getGrammarResolver();
    auto xsModel = resolver->getXSModel();
    MyDataStruct myDataStruct{xsModel};
    return 0;
}

这是我必须走的路线吗?这甚至会起作用吗?有没有在野外展示更好的方法的例子?

【问题讨论】:

    标签: java c++ xml xsd xerces


    【解决方案1】:

    我为 CPP 尝试的上述解决方案似乎确实实现了我想要实现的目标。通过从XercesDOMParser 派生,我可以访问GrammarResolver,因此可以访问XSModel。该模型似乎包含我的数据结构解析所需的数据。

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2011-10-30
      • 2013-05-23
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多