2016-09-14 53 views
0

XSLT新手的問題,所以請裸跟我說:XSL Transormation爲IEEE LOM XML具有重複的命名空間

我試圖用LOM的內聯重複命名空間聲明來轉換XML文檔。該文件包含以下內容:

<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> 

我們看到lom被定義了兩次。

在我的XSLT文件,我當我使用以下命名空間聲明:

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

我設法解析使用標識第一部分的內容如下,例如

lom:rights/lom:cost/lom:value 

,並同樣適用於當我用下面的命名空間聲明

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

使用標識符,如第二種情況:

lom:general/lom:description/lom:string 

我似乎不能夠解析/一次轉換。

有沒有辦法解決這個問題?

回答

1

使用的命名空間聲明,以不同的前綴 - 例如:

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

然後你就可以用這樣的路徑:

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

選擇在第一分支元素,並且:

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

選擇其他分支中的元素。

+0

絕對是正確的方法,但我認爲'lom'和'lomRights'具有更多有意義的前綴(畢竟,通過非後綴名稱調用具有更多專用的名稱空間有點令人誤解)。也許'lom'和'lomR',如果簡潔是更重要的。 –