2014-02-26 8 views
2

저는 xsd (xml best friend) 파일을 C++ 클래스로 파싱하기 위해 xsd 3.3.0 컴파일러를 사용합니다.xsd cxx-tree 파서를 사용하는 XSD에서 C++ 클래스입니다. 파일에서 xml을 여는 메소드.

COMAND 이름

XSD의 CXX 트리 (옵션)입니다 (마지막 웹 링크 참조)

(+ 정보 http://www.codesynthesis.com/projects/xsd/documentation/cxx/tree/guide/)

은 내가 본 몇 가지 예를 file.xsd hello.xsd 문서를 구문 분석하고 .hxx 및 .cxx 파일을 매우 쉽게 생성하는 codesynthesis가 제공합니다.

// Parse a URI or a local file. 
// 

::std::auto_ptr<::hello_t> 
hello (const ::std::string& uri, 
     ::xml_schema::flags f = 0, 
     const ::xml_schema::properties& p = ::xml_schema::properties()); 

: .hxx 그것을 확인, 당신은 XML의 개의 다른 부분을 찾을 수있는 개체를 만드는 XML 문서를 열 수있는 방법 등이 ... .hxx이 같은 코드가 있습니다 그것은 파일 이름으로

문자열 & URI = "hello.xsd"

을 문자열을 수신하고 main.cxx에서 사용하는 개체를 만듭니다.

그래서, 내 xsd 파일과 동일하게하려고합니다. xsd cxx-tree 컴파일러를 사용하지만 "URI 또는 ​​로컬 파일을 구문 분석"하는 메소드를 작성하지 않습니다. 그렇다면 주 프로그램의 XML 파일에서 개체를 만들 수 없습니다.

codesys 컴파일러 설명서 (http://www.codesynthesis.com/projects/xsd/documentation/xsd.xhtml)의 differents 옵션을 사용하여 컴파일 문제를 해결했습니다. 컴파일하려는 대상, 수행 방법, 기타 등에 대한 옵션은 다양하지만 "URI 또는 ​​로컬 파일을 구문 분석"하는 데 사용할 수있는 옵션을 찾을 수있는 옵션이 없습니다.

더 많은 정보를 제공하는 xml-xsd 문서는 CBML 프로토콜 문서입니다.

도움 주셔서 감사합니다.

+0

구문 분석하려는 xsd 파일을 게시 할 수 있습니까? –

답변

0

나는 해결책을 스스로 찾았습니다!

다른 옵션을 사용하여 컴파일했습니다. "--root-element library"옵션을 사용하여 "URI 또는 ​​로컬 파일을 구문 분석"하는 방법을 사용했습니다. 만들어지지 않았습니다.

이 옵션을 삭제하고 모든 주체 개체에 대해 구문 분석 메서드를 만드는 "--root-element-all"을 추가했습니다!

이제 내 프로그램이 작동합니다. 감사!

0

나는 항상이 제품을 사용합니다. 당신이 말한대로 hello.hxxhello.cxx를 생성

xsd cxx-tree hello.xsd

: 여기

은 (내가 생각하는) 일을하려고하는지의 예입니다. 내가 부족하다고 생각하는 부분은 이러한 파일을 사용하여 XML 파일을로드하는 방법 (예 : '로컬 파일로드')을 이해하는 것입니다.

저는 소프트웨어에 XSD 스키마를 어디에서 찾을 지 명시 적으로 말합니다. 다음 코드는 컴파일되지 않지만 참조 용으로 포함되었습니다.

void load(const std::string &xml, const std::string &xsd) { 
    xml_schema::properties properties; 
    properties.no_namespace_schema_location(xsd); 
    // or, if you have a specific namespace you want to load, use 
    // props.schema_location("which namespace", xsd); 
    try { 
     std::auto_ptr< ::hello_t> xml_file = hello(xml, 0, props); 
     // operate on the xml_file via "->" notation 
     std::cout << xml_file->hello() << std::endl; 

    } catch (const ::xml_schema::exception &e) { 
     std::ostringstream os; 
     os << e.what(); 
     // report the error as you see fit, use os.str() to get the string 
    } 

} 

하면 *.cpp 파일에 *.cxx 파일을 링크해야합니다.

이것이 원하는 것이 아니라면 의견에 대해 알려주세요. 더 도움을 드리겠습니다.

+0

나는 CMAKE를 컴파일하는데 사용하는데, 나는 그것에 문제가 없다. 내가 코멘트에 해결책을 썼다! 하지만 고맙습니다. – kahke