具有重复命名空间的IEEE LOM XML的XSL转换

时间:2016-09-14 16:14:22

标签: xml xslt xml-namespaces

我正在尝试使用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 个答案:

答案 0 :(得分: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

选择另一个分支中的元素。