LiquidXMLStudio映射XML到C++代码

  人类社会,据马克思所说,三要素:
  
  生产力,生产关系和财富再分配。
  
  虽然说,总体来说,我个人认为,财富再分配,是核心是重,但对于吊丝来说,还是关注一下生产力吧。至于爸爸是李刚刚的,考虑一下基它的吧。
  
  生产力的核心,就是工具。
  
  所以,做为一个程序员,掌握工具,是很重要的。以前我招人,也是理论和工具并重。一个不注重工具的人,往往是一个不注重实践的人。赵括理论还不错,但打起仗来,就不成。其中一个原因,就是实践不够,或是不重视实践。
  
  这里我总结一下我自己的心理。如果你不幸进来看到我写的文字,先忍一下我的罗索吧。
  
  XML的工具,最近我用了用,几个XMLSpy和LiquidXMLStudio是主要用的两种。
  
  ********************
  
  Let‘s Start:
  
  先看一个网页:
  
  这也是我的习惯。
  
  不过这里面的列,不是很全。
  
  我是希望有几个方面:
  
  * 能生成C++代码,这个功能在这里被称做:map。map的意思是说从xsd映射到代码。当然,也有其它的含义,但一般不会用map,比如xml to xml, xml to DB. 都会写清楚,但只有map,现在看来就是这个意思。之所以,要生成C或C++代码,是因为我底层的解析器就是用C写的。不想在这个层面来转换。
  
  因为XML本身,才是接口信息的承载。没必要,再加入一种新语言。
  
  * 如果生成的代码,是基于开源的XML库就更好的。
  
  目前来看,经过调研,目前最好的XML开源库,就是libxml2和xerces. 不过,总体来说,如果我自己来做,会选libxml2.
  
  因为这个库是基于C的,也便于跨平台。
  
  * 其它的XML自动化编辑工具。这些就不用说了。
  
  但事实上,没有找到达到这种要求的编辑器。
  
  除XMLSpy 和 LiquidXMLStudio 以外,发现还有两个比较强大,其实,哪个强大,你只需要在这里看看哪个最贵就可以了。
  
  http://en.wikipedia.org/wiki/Comparison_of_XML_editors
  
  不过,我是没看懂,为什么有的那么贵。看来,程序员,总是站在程序员的角度来看世界,里面最贵的MadCap Flare,比LiquidXMLStudio贵了一个量级。
  
  好象MadCap Flare和XMLSeedXML Schema Editor
  
  类似,都是用于非程序员的。他们贵的原因,都是因为真真正正在用XML的含义:完备性的文档(不是程序员的叫法:可扩展性ML)。是给不是程序员的人用的,看来也说明,程序员普遍都是吊丝。外国可能也是如此。
  
  哈。吊丝们都回回神,不多说了,所以关注点来是回到XMLSpy 和 LiquidXMLStudio。(为什么我用吊丝?因为QQ拼音,因为高大上的原因,打不出来这个词)。
  
  让我吃惊的是,XMLSpy好贵。快赶上非程序员用的。
  
  但,我这没有最新版的2014,据说也是可以完成XML到C++的MAP.
  
  所以,只用到了LiquidXMLStudio。
  
  LiquidXMLStudio 可以映射各种语言,只是我用到了C++。
  
  至于如何操作,我不写了,看这个页面:
  
  http://www.liquid-technologies.com/Liquid-Products/LearnAbout/XmlDataBinding.aspx
  
  没有被墙。
  
  忘了说,这是我最关注的一个要点
  
  * 没有被墙。
  
  下一个,当然是,有D版的。
  
  然后,最好有vs 2003以下版本的。能在XP运行的。
  
  以上就是我的要求。
  
  ***********************************************************************
  
  经过调研,没有达到要求的,暂时。
  
  但xmlstudio2011 最合适,因为有破解,可以生成C++代码。
  
  用的虽然不是开源的XML库,但也够用了。
  
  ***********************************************************************
  
  以下是示例代码,最关键是这几句
  
  BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
  
  BookStoreLib::CBookTypePtr spBook = spBS->GetBook()->Add();
  
  spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
  
  spBook->SetPrice(8.99);
  
  spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
  
  spBook->SetISBN(_T("1-861003-11-0"));
  
  spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
  
  spBook->GetAuthor()->SetLast_name(_T("Franklin"));
  
  spBook->SetGenre(_T("autobiography"));
  
  std::tstring strXml = spBook->ToXml();
  
  1. 打开一个XSD,然后:打开向导:
  
  2. 选择C++语言
  
  3. 可以修改一些信息,可选
  
  4. 填加一个测试用的XML文件。
  
  5. OK 了,打开工程后
  
  6. 打开工程,进行一点编码。Liquid会自动创建一个chm帮助文档,这个我太喜欢了。
  
  照着下面这样,你就可以生成一个可以工作的例子了。
  
  对了,我所选的xml是在示例工程下面。
  
  D:\Program Files (x86)\Liquid Technologies\Liquid XML 2014\Examples\BookStore\Schemas\BookStore.xsd
  
  D:\Program Files (x86)\Liquid Technologies\Liquid XML 2014\Examples\BookStore\Data Files\BookStoreSample.xml
  
  **********************************************
  
  // create an instance of the class to load the XML file into
  
  bs::CBookstorePtr elm = bs::CBookstore::CreateInstance();
  
  // load the xml from a file into the object (the root element in the
  
  // xml document must be <bookstore>.
  
  elm->FromXmlFile(lpctFilename);
  
  //--------<haoyujie>--------------
  
  bs::CBookTypePtr spBook = elm->GetBookCol()->Add();
  
  spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
  
  spBook->SetPrice(8.99);
  
  spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
  
  spBook->SetISBN(_T("1-861003-11-0"));
  
  spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
  
  spBook->GetAuthor()->SetLast_name(_T("Franklin"));
  
  spBook->SetGenre(_T("autobiography"));
  
  //--------</haoyujie>--------------
  
  *********************************************
  
  #include "stdafx.h"
  
  #include "../BookStoreLib.h"
  
  #include "../BookStoreLib/Bookstore.h"
  
  using namespace LtXmlLib12;
  
  // forward declarations
  
  void SimpleTestBookStoreLibCBookstore(LPCTSTR);
  
  void WriteTest();
  
  void ReadTest();
  
  /// <summary>
  
  /// The main entry point for the application.
  
  /// </summary>
  
  int main(int argc, char* argv[])
  
  {
  
  WriteTest();
  
  ReadTest();
  
  _tprintf(_T("\n\nPress a key to finish"));
  
  getchar();
  
  return 0;
  
  }
  
  void WriteTest()
  
  {
  
  try
  
  {
  
  _tprintf(_T("\nCreating an XML document...\n"));
  
  // to create the XML document from scratch
  
  BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
  
  BookStoreLib::CBookTypePtr spBook = spBS->GetBook()->Add();
  
  spBook->SetTitle(_T("The Autobiography of Benjamin Franklin"));
  
  spBook->SetPrice(8.99);
  
  spBook->SetPublicationdate(LtXmlLib12::CDateTime(1981, 5, 11));
  
  spBook->SetISBN(_T("1-861003-11-0"));
  
  spBook->GetAuthor()->SetFirst_name(_T("Benjamin"));
  
  spBook->GetAuthor()->SetLast_name(_T("Franklin"));
  
  spBook->SetGenre(_T("autobiography"));
  
  std::tstring strXml = spBook->ToXml();
  
  _tprintf(_T("\nThis is the XML:\n%s"), strXml.c_str());
  
  }
  
  catch (CLtException& e)
  
  {
  
  // Note : exceptions are likely to contain inner exceptions
  
  // that provide further detail about the error, GetFullMessage
  
  // concatantes the messages from them all.
  
  _tprintf(_T("Error - %s\n"), e.GetFullMessage().c_str());
  
  }
  
  }
  
  void ReadTest()
  
  {
  
  try
  
  {
  
  _tprintf(_T("\nReading an existing XML document...\n"));
  
  // to create the XML document from scratch
  
  BookStoreLib::CBookstorePtr spBS = BookStoreLib::CBookstore::CreateInstance();
  
  spBS->FromXmlFile(_T("..\\..\\..\\BookStoreSample.xml"));
  
  for (BookStoreLib::CBookTypeCol::iterator itr = spBS->GetBook()->begin();
  
  itr != spBS->GetBook()->end();
  
  itr++)
  
  {
  
  BookStoreLib::CBookTypePtr spBook = *itr;
  
  _tprintf(_T("Book Title %s\n"), spBook->GetTitle().c_str());
  
  _tprintf(_T(" Price %f\n"), spBook->GetPrice());
  
  _tprintf(_T(" Author %s %s\n"), spBook->GetAuthor()->GetFirst_name().c_str(), spBook->GetAuthor()->GetLast_name().c_str());
  
  if (spBook->IsValidPublicationdate())
  
  _tprintf(_T(" Publicationdate %s\n"), spBook->GetPublicationdate().ToString().c_str());
  
  else
  
  _tprintf(_T(" Publicationdate Not Listed\n"));
  
  if (spBook->IsValidISBN())
  
  _tprintf(_T(" ISBN %s\n"), spBook->GetISBN().c_str());
  
  else
  
  _tprintf(_T(" ISBN Not Listed\n"));
  
  if (spBook->IsValidGenre())
  
  _tprintf(_T(" Genre %s\n"), spBook->GetGenre().c_str());
  
  else
  
  _tprintf(_T(" Genre Not Listed\n"));
  
  }
  
  }
  
  catch (CLtException& e)
  
  {
  
  // Note : exceptions are likely to contain inner exceptions
  
  // that provide further detail about the error, GetFullMessage
  
  // concatantes the messages from them all.
  
  _tprintf(_T("Error - %s\n"), e.GetFullMessage().c_str());
  
  }
  
  }

猜你喜欢

转载自www.cnblogs.com/aquariusunny/p/12729976.html
今日推荐