2010-12-23 9 views
0

Ich habe eine XML-Datei namens "map.xml", die eine andere XML-Datei "map1.xml" aufruft. Map.xml verweist auf map.xsl.XPATH in XSLT - DITA XML-Dateien

In XSLT muss ich den Code schreiben, um den Knotenwert in map1.xml zu erhalten? Kann jemand von Ihnen bitte eine Lösung dafür vorschlagen?

Im Folgenden Code spezifisch für DITA-Standards

map1.xml:

<?xml version="1.0" encoding="UTF-8"?> 
     <!-- code to refer XSLT --> 
      <map title="DITA Topic Map"> 
    <topicref href="client.xml"/> 
     </map> 

map2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <concept id="map2"> 
<title>Client Rights</title> 
<conbody> 
    <p>Part of your job as a healthcare provider.</p> 
</conbody> 
     </concept> 
+0

DITA folgt seiner eigenen Konvention für Themenverknüpfung, nicht XPath oder XPointer. Überprüfen Sie http://docs.oasis-open.org/dita/v1.0/dita-v1.0-spec-os-ArchitecturalSpecification.pdf –

Antwort

1

Verwenden Sie das XSLT-Dokument() -Funktion Zugangsknoten in einem separaten XML Dokument. Ein einfaches Beispiel (mit freundlicher Genehmigung von w3schools.com) finden Sie here.

Ich bin ein neuer Benutzer, also hindert mich SO daran, einen zweiten Link in meiner Antwort zu posten. Hier ist das Beste, was ich tun kann: Die Erklärung von document() zum XSLT-Standard finden Sie unter www.w3.org/TR/xslt#document.

3

Die Verwendung der XSLT-Funktion document() sieht wie folgt aus.

Zum Beispiel den Inhalt/Wert des p-Element in map2.xml zu erhalten:

<xsl:value-of select="document('map2.xml')/concept/conbody/p"/> 

Lassen Sie sich diese auf Ihrem Beispiel nicht getestet, aber das ist, was würde ich versuchen!

1

denke ich, die Quellen tatsächlich so aussehen sollte (mit einem Verweis auf eine DTD oder ein Schema, nicht auf eine styleheet):

map.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd"> 
<map title="DITA Topic Map"> 
    <topicref href="client.xml"/> 
</map> 

client.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE concept PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd"> 
<concept id="client.xml"> 
<title>Client Rights</title> 
<conbody> 
    <p>Part of your job as a healthcare provider.</p> 
</conbody> 
</concept> 

ist David Vorschlag richtig, es Sie das folgende Ergebnis ergibt:

Part of your job as a healthcare provider. 

auf diese zu suchen: Um die Verwendung von DITA Spezialisierung Funktion zu machen, würden Sie eher so etwas wie folgt verwenden:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 

<xsl:output omit-xml-declaration="yes"/> 

<xsl:template match="*[contains(@class, ' map/topicref ') and @href]"> 
    <xsl:variable name="topic" select="document(@href, .)"/> 
    <xsl:value-of select="$topic//*[contains(@class, ' topic/p ')]"/> 
</xsl:template> 

</xsl:stylesheet> 

Mit den Beispieldaten, führt dies zu dem gleichen Ergebnis. Aber wenn Sie ein spezialisiertes Absatzelement <myp> von <p> abgeleitet hätten, könnten Sie immer noch die gleiche Umwandlung für das neue Element verwenden.

Verwandte Themen