2016-09-14 2 views
0

XSLT newbie Frage so pls blank mit mir:XSL transormation für IEEE LOM XML mit doppelter Namespace

Ich versuche, ein XML-Dokument mit doppelter Inline-Namespace-Deklaration von lom zu transformieren. Das Dokument enthält unter anderem folgendes:

<metadata> 
    <schema>http://ltsc.ieee.org/xsd/LOM/imslode/ilox/any/rights</schema> 
    <lom xmlns="http://ltsc.ieee.org/xsd/LOM/imslode/ilox/any/rights" xsi:schemaLocation="http://ltsc.ieee.org/xsd/LOM/imslode/ilox/any/rights http://www.imsglobal.org/profile/lode/lodev1p0/lodev1p0_ilox_any_rights_lom_v1p0.xsd"> 
     <rights> 
     <cost> 
      <source>costValues</source> 
      <value>no</value> 
     </cost> 
     <copyrightAndOtherRestrictions> 
      <source>copyrightAndOtherRestrictionsValues</source> 
      <value>yes</value> 
     </copyrightAndOtherRestrictions> 
     <description> 
      <string language="x-t-cc-url">Licence text goes gere</string> 
     </description> 
     </rights> 
    </lom> 
</metadata> 

<metadata> 
    <schema>http://ltsc.ieee.org/xsd/LOM</schema> 
    <lom xmlns="http://ltsc.ieee.org/xsd/LOM" xsi:schemaLocation="http://ltsc.ieee.org/xsd/LOM http://ltsc.ieee.org/xsd/lomv1.0/lomLoose.xsd"> 
     <general> 
     <title> 
      <string language="es">Title goes here</string> 
     </title> 
     <description> 
      <string language="es">Description goes here</string> 
     </description> 
     <keyword> 
      <string language="en">a_nice_keyword</string> 
     </keyword> 
     </general>  
    </lom> 
</metadata> 

Wir sehen, dass Lom zweimal definiert ist.

In meiner XSLT-Datei, ich, wenn ich verwende folgende Namespace-Deklaration:

xmlns:lom="http://ltsc.ieee.org/xsd/LOM/imslode/ilox/any/rights" 

Ich schaffe es, die Elemente des ersten Teils unter Verwendung von Identifikatoren zu analysieren, wie folgt, z.B.

lom:rights/lom:cost/lom:value 

und gleiche gilt für den zweiten Fall, wenn ich die folgende Namespace-Deklaration verwenden

xmlns:lom="http://ltsc.ieee.org/xsd/LOM" 

mit Kennungen wie:

lom:general/lom:description/lom:string 

scheine ich nicht in der Lage sein, zu analysieren/transformiere beides gleichzeitig.

Gibt es einen Weg um dies?

Antwort

1

Verwenden Sie zwei Namespace-Deklarationen, mit unterschiedlichen Präfixen - zum Beispiel:

xmlns:lom="http://ltsc.ieee.org/xsd/LOM/imslode/ilox/any/rights" 
xmlns:lom2="http://ltsc.ieee.org/xsd/LOM" 

Dann können Sie den Pfad so verwenden:

metadata[1]/lom:lom/lom:rights/lom:cost/lom:value 

Elemente im ersten Zweig zu wählen, und:

metadata[2]/lom2:lom/lom2:general/lom2:description/lom2:string 

, um Elemente in der anderen Verzweigung auszuwählen.

+0

Definitiv der richtige Ansatz, aber ich würde 'Lom' und 'LomRights' in Betracht ziehen, um aussagekräftigere Präfixe zu haben (den Namespace mit dem spezialisierteren Zweck durch den Namen ohne Suffix aufzurufen, ist ein bisschen irreführend). Vielleicht "lom" und "lomR", wenn Knappheit eine größere Rolle spielt. –