我必須使用XSLT從一個XML轉換爲另一個XML。我的源文件中有一些命名空間,並且在所需的文件中,我必須保留所有這些命名空間,除了更改xsi:schemaLocation
的值並在<resource>
節點中添加adlcp:scormtype="sco"
屬性。XSLT:更改名稱空間的值
我的輸入文件:
<?xml version="1.0" encoding="UTF-8"?>
<manifest identifier="eXescorm_quiz4823c6301f3d3afc1c1f"
xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2"
xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">
<resources>
<resource identifier="RES22" type="webcontent" href="index.html">
<file href="index.html"/>
<file href="common.js"/>
</resource>
</resources>
</manifest>
所需的輸出:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
identifier="eXeorm_sample4823c6301f29a89a4c1f"
xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2"
xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.imsproject.org/xsd/imscp_v1p1 imscp_v1p1.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd">
<resources>
<resource identifier="RES22" type="webcontent" href="index.html" adlcp:scormtype="sco">
<file href="index.html"/>
<file href="common.js"/>
</resource>
</resources>
</manifest>
我的XSLT(更新)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2"
xmlns:xhtml="http://www.imsglobal.org/xsd/imscp_v1p1"
xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
exclude-result-prefixes="xhtml">
<xsl:output method="html" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xhtml:resource[@type='webcontent']"
xmlns="http://www.w3.org/1999/xhtml">
<resource adlcp:scormtype="sco">
<xsl:apply-templates select="
(@*[local-name()!='adlcp:scormtype'])
| node()"/>
</resource>
</xsl:template>
請幫我改變命名空間的價值xsi:schemalocation
謝謝!
非常感謝。這是完美的。 :) 結合我的兩個解決方案的不同問題後,我有一分鐘的問題,我將作爲一個新的問題發佈。再次感謝你的幫助。 :) – RahulD 2012-08-10 02:58:26
@rahuldwivedi:不客氣。 – 2012-08-10 03:27:53