xercec-c: Frage zu den XML Namespaces (DOMWriter)



  • Hallo Board,

    ich verwende xercec-c 2.6.0. Ich habe eine Xml-Datei, wo root-Element und alle andere Childs mit meinem eigenen namespace qualifiziert sind.

    Wenn ich das Dokument selsbt im Speicher erstelle und dann mit dem DOMWriter rausschreibe, wird per default eingestellt, dass mein Namespace default-mässig benutzt wird und kein Element bekommt einen namespace Qualifizierer davor (Prefix).

    So soll es sein (ist):

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <foo:Root xmlns:foo="http://www.foo.bar/Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.bar/Root \\projekte\foobar.xsd">
    
    <foo:Root>barfoo</foo:Root>
    

    Und so kann ich das rausschrieben:

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <Root xmlns="http://www.foo.bar/Root" xmlns:foo="http://www.foo.bar/Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.bar/Root \\projekte\foobar.xsd">
    <Root>barfoo<Root>
    

    Jemand Idee, wo ich das Setting einstellen mus, damit er keine Dafeult-namespaces macht?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kommt mir bekannt vor:

    Der Expat Parser von James Clark kann kein [:]- Scopes handle´n bei einer Knotensteuerung.
    Das selbe Problem hatte ich damals bereits mit Sablotron, der ebenfalls auf Expat basiert. Aus <SOAP:Body ... erstellte er mit ein File-Dump <SOAP ...
    Klassische NIH (Not-Included-Here) Problem. Leider konnte ich den Parser nicht austricksen und musste den Knoten durch Umgehung der DOM Funktionen rekonstruieren.

    Xercec-C basiert ebenfalls auf Expat ... 😞



  • Ich habe zu diesen Thema noch was gefunden.

    http://www.xml.com/pub/a/1999/09/expat/index2.html
    see
    - working with expat
    - communication between handles
    - namespace processing



  • Hi Prof,

    Danke für die Antwort.

    Mir wäre es neu, dass xercec-c auf Expat basiert. xercec wurde ja ursprünglich von IBM entwickelt und dann an die Apache Foundation asl OpenSource übergeben, Apache hat den namen geändert und kümmert sich um die weiterenwicklung/portierungen des Parsers, soweit ich es weiß..

    Ich habe mir den Link angesehen un des ist doch leider relativ anders als bei xercec.

    Mein Problem lag beim Setzten der Attribute des Root-Elements.

    rootElem->setAttribute("xmlns:foo", "http://www.foo.bar/Root");

    Wenn ich diesen Attribute nicht beim Root-Element setzte, also z.B. auskommentiere und nur noch beim DOMDocument nur die NamespaceURI setzte, sowie beim:

    DOMElement* rootElem = doc->createElement("foo:Root");

    zum Namen des Root-Elements auch namespace prefix dazu schreibe, also nicht wie davor "Root", sieht meine XML-Datei, die ich rausschreibe genausoso, wie ich das wollte... 🙂

    Es fehlt nur noch ein einziger Zeilenumbruch

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?><foo:Root xmlns:foo="htp://..
    

    Nach der XMl-Header Declaration. Das ist aber zweitrangig.

    lazy

    P.S. Irgendwas dazu in der xercec Doku habe ich übrigens nicht gefunden, war nur so eine Idee, die funktioniert hat ;=)


Anmelden zum Antworten