Trotz meiner völligen Unerfahrenheit auf dem Gebiet des XML-Parsings konnte ich xsd
verwenden, um gültiges C++
zu erstellen und erfolgreich zu kompilieren und zu verlinken, aber der Compiler hat die Instantiierung opti miert (?). Also, von vorne anfangend, versuche ich das Hello World XML-Beispiel bei CodeSynthesis. Aber das schlägt fehl:
[wally@lenovotower xml]$ make hello
xsdcxx cxx-tree hello.xsd
g++ -c -o helloschema.o hello.cxx
g++ -g -o hello -lxerces-c helloschema.o hello.c++
[wally@lenovotower xml]$ ./hello
hello.xml:2:8 Fehler: keine Deklaration gefunden für Element 'hello'
hello.xml:4:13 Fehler: keine Deklaration gefunden für Element 'greeting'
hello.xml:6:9 Fehler: keine Deklaration gefunden für Element 'name'
hello.xml:7:9 Fehler: keine Deklaration gefunden für Element 'name'
hello.xml:8:9 Fehler: keine Deklaration gefunden für Element 'name'
hello.c++:
#include <iostream>
#include <stdio.h>
#include "hello.hxx"
using namespace std;
int main (void)
{
try {
auto_ptr h (hello ("hello.xml"));
for (hello_t::name_const_iterator i (h->name ().begin());
i != h->name().end();
++i)
cout << h->greeting () << ", " << *i << "!" << endl;
}
catch (const xml_schema::exception& e)
{
cerr << e << endl;
return 1;
}
return 0;
}
hello.xml:
<?xml version="1.0"?>
<greeting>Hello</greeting>
<name>sun</name>
<name>moon</name>
<name>world</name>
hello.xsd:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="hello_t">
<xs:sequence>
<xs:element name="greeting" type="xs:string"/>
<xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="hello" type="hello_t"/>
</xs:schema>
Ich denke, dass ich genau das tue, was dort steht, aber die Befehle funktionieren nicht genau wie dokumentiert. Ich habe festgestellt, dass xsdcxx
anscheinend das Richtige tut (im Gegensatz zu xsd
, das C# oder vb.net-Ausgabe generiert).
[wally@lenovotower xml]$ xsdcxx --version
CodeSynthesis XSD XML Schema to C++ compiler 3.3.0
Copyright (C) 2005-2010 Code Synthesis Tools CC
Außerdem füge ich kein -I
(Verzeichnis) hinzu und es kompiliert fröhlich. Könnte es sein, dass es irgendwie die falsche Include-Datei verwendet?
Was mache ich falsch? Vielleicht ist xsd
nicht das richtige Werkzeug?