3 Stimmen

Wiederverwendung von XML-Elementen aus anderen Dateien

Ist es möglich, ein XML-Element aus einer anderen Datei in einer anderen XML-Datei zu verwenden?
Zum Beispiel, anstatt zu haben:

<document>
   <a><!-- huge content --></a>
   <b/>
</document>

Ich möchte gerne haben:

<document>
    <a ref="aDef"/>
    <b/>
</document>

Wo wird in einer eigenen XML-Datei definiert und bei Bedarf wiederverwendet. Ich möchte, dass dies vom Parser erledigt wird und für die Anwendung transparent ist. Die Anwendung kann nicht wissen, ob das Element eine Referenz oder eine Kopie ist.
Wie kann ich das erreichen?

3voto

rvdb Punkte 399

Dies ist das, was die xinclude W3C-Standard ist für. Ähnlich wie beim Ansatz der externen Entitäten (wie in der obigen Antwort) können Sie den einzuschließenden Inhalt in einer separaten Datei kodieren, wie z. B. (frag.xml):

<a><!-- huge content --></a>

In der Haupt-XML-Datei verweist eine xinclude-Anweisung auf diesen externen Inhalt:

<document>
  <xi:include href="frag.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
  <b/>
</document>

Bei der Verarbeitung mit einem (xinclude-fähigen) XML-Prozessor (wie z. B. Xerces http://xerces.apache.org/ ), wird der Parser diese xinclude-Anweisung um den Inhalt erweitern, auf den sie verweist. Das Einschlussziel im @href-Attribut wird als URI interpretiert, so dass Sie auch auf Fragmente verweisen können, indem Sie Fragmentbezeichner verwenden (z. B. href="frag.xml#fragment1 ).

Neben einfachen URIs in @href unterstützt der xinclude-Standard ein sehr feinkörniges Vokabular, um das Einschlussziel in einem @xpointer-Attribut auszudrücken. Die Unterstützung für komplexe XPointer-Ausdrücke hängt jedoch von der XPointer-Konformität des Prozessors ab, die im Allgemeinen nicht ausreichend genutzt wird. Es gibt jedoch auch eine (minimale) XSLT-Implementierung: XIPr ( http://dret.net/projects/xipr/ ).

2voto

Daniel Haley Punkte 48844

Dies ist eine Möglichkeit:

XML-Fragmentdatei (frag.xml):

<a><!-- huge content --></a>

Haupt-XML-Datei:

<!DOCTYPE document [
<!ENTITY aDef SYSTEM "frag.xml">
]>
<document>
   &aDef;
   <b/>
</document>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X