2012-07-06 164 views
0

我是XSLT的新手,我试图将一个XML文件转换为另一个XML文件。我的问题是有一个命名空间'xmlns'在原始xml文件中没有任何前缀,当我通过xslt将它转换为另一个时,则没有任何反应,但是如果我删除了那个xmlns命名空间,那么它可以解决,但实际上我无法修改原始.xml文件,因为我只能使用该文件,所以我必须将xmlns保留在原始文件中。所以任何人都可以在我的.xsl或java代码中建议一些修改来克服这个问题。XSLT和Java:默认名称空间XMLNS

我原来的XML命名空间看起来喜欢 -

<?xml version="1.0" encoding="UTF-8"?> 
     <manifest identifier="eXeorm_sample4823c6301f29a89a4c1f" 
     xmlns:ims="http://www.imsglobal.org/xsd/imscp_v1p1" 
     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"  
</manifest> 

我想要的XML是:

<?xml version="1.0" encoding="UTF-8"?> 
     <manifest identifier="eXescorm_quiz4823c6301f29a8419515" 
      xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2" 
      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" 
     </manifest> 

我修改XSLT-

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2" 
xmlns:ims="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" 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:template match="ims:manifest"> 
</xsl:stylesheet> 

回答

1

在此之上有一个搜索框页面:键入“XSLT默认命名空间”,您会发现数百个这个问题的答案。

顺便说一句,您的代码非常冗长。取而代之的是:

<xsl:element name="item"> 
    <xsl:attribute name="identifier">ITEM-eXeorm_sample4823c6301f29a89a4d27</xsl:attribute> 
    <xsl:attribute name="isvisible">true</xsl:attribute> 
    <xsl:attribute name="identifierref">RES-eXeorm_sample4823c6301f29a89a4d28</xsl:attribute> 
</xsl:element> 

使用本:

<item identifier="ITEM-eXeorm_sample4823c6301f29a89a4d27" invisible="true" 
     identifierref="RES-eXeorm_sample4823c6301f29a89a4d28"/> 
+0

非常感谢您的答复和建议。在发布问题之前,我已经通过了关于命名空间前缀的一些线索,但那些问题没有解决。我会根据你的建议尝试并回复你。感谢您! – RahulD 2012-07-06 15:23:58

+0

@MichaelKey我根据您的建议修改了我的XSLT,并且一些解决方案提到了其他线程。现在我的第二个问题解决了,我没有得到adlcp相关的错误,但第一个问题仍然保持原样。它不适用于默认名称空间。在我的情况下,默认命名空间的值在两个XML文件中都不同,并且它在清单标记下列出。请建议我对该部分进行必要的修改,如果可能的话,请在我的代码中编辑该xmlns部分。 感谢你! – RahulD 2012-07-07 06:04:43

+0

Dr.Michael我能够通过在原始XML文件中保留默认命名空间来生成输出,但输出与我想要的不完全相同。清单标签下的名称空间的声明区域看起来不同,并且某些名称空间(如xmlns:adlcp =“http://www.adlnet.org/xsd/adlcp_rootv1p2”)会自动添加到其他标记中,这些标记不是必需的。请建议我进行修改。 感谢你! – RahulD 2012-07-07 22:52:15

相关问题