2009-04-07 8 views
0

Ich transformiere ein XML-Dokument mit Xerces-C 2.5 und Xalan-C 1.8. Das XSL enthält eine "Dokument" -Funktion, die auf eine Datei im Netzwerk verweist. Leider kann ich nicht auf diese Datei per HTTP zugreifen. Ich habe nur den UNC-Pfad.Xerces/Xalan: UNC-Pfad als Argument für die Dokumentfunktion?

Xerces verweigert die Analyse des referenzierten Dokuments, weil WinSockNetAccessor :: makeNew in Xerces aufgerufen wird, da das Protokoll "Datei" nur für lokale Dateien akzeptiert wird. WinSockNetAccessor :: makeNew ist nur für HTTP implementiert, eine Ausnahme wird ausgelöst und die Datei wird ignoriert.

Gibt es eine Möglichkeit, Xerces zu täuschen, um den unc-Pfad als lokale Datei oder eine andere bekannte Problemumgehung zu akzeptieren, ohne einen eigenen Parser zu schreiben oder Xerces zu manipulieren?

Antwort

1

Eine einfache Problemumgehung wäre, ich denke, nur ein Mapping zu erstellen, so dass Sie das Netzlaufwerk O anrufen können: oder was auch immer. Das führt oft zu Fehlern bei Programmen, die nicht direkt mit einem UNC-Pfad arbeiten können (z. B. cmd.exe).

+0

Es gibt keine "Täuschung" beteiligt. Ein zugeordnetes Netzlaufwerk ist kein UNC-Pfad. Alle netzwerkbezogenen Aktivitäten werden vom Redirector übernommen. Jedes lokale Programm sieht nur ein Standardlaufwerk (mit einem nicht standardmäßigen Typ, obwohl die meisten Programme nicht danach fragen). – Tomalak

0

Hat die UNC, wie sie in der XSL angezeigt wird, ein Präfix "file:"?

BTW, Xerces C V2.5 ist mehrere Jahre alt. Hast du die neueste Version - V3.0.1 - ausprobiert?

+0

Xerces "normalisiert" den URI trotzdem und das Ergebnis ist dasselbe für "file: // \\ pc4711 ...", "\\ pc4711 ...". BTW: MSXML reagiert stattdessen für beide Begriffe unterschiedlich und MSXML wird die Wahl sein, wenn ich den Parser ändern muss. Aber Sie haben völlig Recht, die Antwort lautet: Verwenden Sie diesen alten Schrott nicht. –