首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自Java的Xerces-C XSModel端口

来自Java的Xerces-C XSModel端口
EN

Stack Overflow用户
提问于 2019-12-02 17:51:31
回答 1查看 62关注 0票数 0

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

JAVA

代码语言:javascript
复制
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文档中找到任何可能产生类似结果的内容。据我所知,我可以通过XSModel*xercesc::GrammarResolver*访问xercesc::AbstractDOMParser,但这需要从解析器派生,因为它是一个受保护的函数。

CPP

代码语言:javascript
复制
#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;
}

这是我必须走的路线吗?这样还行吗?在野外是否有这样做的更好的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-02 19:32:40

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59144245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档