我正在尝试使用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
我似乎无法一次解析/转换。
有解决方法吗?
答案 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
选择另一个分支中的元素。