Wie füge ich ein namespace-Präfix zu jedem Knoten mit TXMLDocument
Ich verwendet das XML-Binding-Assistenten erstellen Sie ein Nachkomme von TXMLDocument. Die Dateien generiert, die von dieser Klasse erklären würde, den namespace im Wurzel-Knoten, und erstellen Sie nur den einfachen, schmucklosen Knoten für den rest des Dokuments.
<?xml version="1.0"?>
<RootNode xmlns="URL" xmlns:xsi="URL" xsi:schemaLocation="URL">
<SomeNode>
<AnotherNode>Value</AnotherNode>
</SomeNode>
</RootNode>
Hatte ich keine Probleme beim Lesen oder überprüfen diese auf allen. Jedoch, der Prozessor, wo diese Dateien gesendet werden, verlangt nun von jedem Knoten der Namensraum-Präfix, um Sie zu verarbeiten-Dateien korrekt.
<?xml version="1.0"?>
<NS:RootNode xmlns:NS="URL" xmlns:xsi="URL" xsi:schemaLocation="URL">
<NS:SomeNode>
<NS:AnotherNode>Value</NS:AnotherNode>
</NS:SomeNode>
</NS:RootNode>
Wie kann ich erreichen, das mein TXMLDocument Nachkomme? Ich hoffe, es wird nicht mit der hand Bearbeiten 10000 Zeilen code erzeugt.
- Sorry, habe ich wohl etwas falsch gelesen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, die Lösung dauerte eine lange Zeit, um zu entdecken, war aber überraschend einfach.
Den code generiert XML Data Binding Wizard erstellen von xml mithilfe der Standard-namespace. Sie können dies durch die Prüfung der
Get
,Load
undNew
Funktionen in den generierten unit. Alle drei Aufrufe anGetDocBinding
übergebenTargetNamespace
als letzter parameter.TargetNamespace
ist eine Globale Konstante Zeichenfolge mit der URI extrahiert aus dem schema oder xml-Dokument, das Sie gefüttert, um die Bindung Wizard.Weil
TargetNamespace
zugeordnet ist, um das root-element als Standard-Namensraum, die keine untergeordneten Elemente haben ein Präfix.Den Weg, dies zu tun:
Nun der root-Knoten wird wie folgt Aussehen:
Und alle Kind-Knoten haben das Präfix, wenn Sie erstellt werden.
Mögliche Lösung für das problem mit mehreren namespace: Einhaken und Klasse Helfer
Nur eine Ergänzung zu der Antwort oben, manchmal müssen Sie möglicherweise das namespace-Präfix weiterhin in sich wiederholenden untergeordneten Knoten (der Typ, den Sie erstellen mithilfe der Add() oder Insert () - Funktionen). In diesem Fall müssen Sie das Präfix und Doppelpunkt vor der Kind-Klasse-name im ersten argument von RegisterChildNode() und die ItemTag variable übereinstimmen. (Siehe Beispiel unten mit "CPR:" als namespace-Präfix)
Inspiriert durch die Lösung von Cedomir Plavljanic, ich erstellte Einheit Einhaken delphi-Verfahren und erlaubt die einfache Nutzung Einheiten erstellt, die mit Delphi XML Binding Wizard mit mehreren namespace und die richtigen Präfixe.
XMLDocHelper
hinzufügen namespace + Präfix XML mit XSL
Die akzeptierte Antwort, die zeigt, wie XSL kann verwendet werden, um namespace-Präfixe.
Zitat:
Verwenden:
Wenn diese transformation wird angewendet auf das XML-Dokument, das wollte, das richtige Ergebnis produziert wird: