使用XSLT时的命名空间

时间:2014-07-02 09:43:37

标签: xml xslt

我一直在这个表格上搜索我的问题的答案,但没有找到任何结果。问题是我应该使用命名空间来使用XSLT转换下面的XML。将命名空间添加到XSLT时,转换不起作用。

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<TED_EXPORT xmlns="http://publications.europa.eu/TED_schema/Export" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xsi:schemaLocation="http://publications.europa.eu/TED_schema/Export/R2.0.8.S02.E01 TED_EXPORT.xsd" 
DOC_ID="146944-2014" 
EDITION="2014085">
<TECHNICAL_SECTION>
  <RECEPTION_ID>14-147821-001</RECEPTION_ID>
  <DELETION_DATE>20150422</DELETION_DATE>
  <FORM_LG_LIST>DA DE EN ES FI FR EL IT NL PT SV CS ET HU LT LV MT PL SK SL GA BG RO HR </FORM_LG_LIST>
  <COMMENTS>From Convertor</COMMENTS>
</TECHNICAL_SECTION>
</TED_EXPORT>

XLST文件:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"      
    xmlns:ted="http://publications.europa.eu/TED_schema/Export#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    exclude-result-prefixes="xsl">


<xsl:template match="/">
    <rdf:RDF>
        <xsl:value-of select="//@EDITION"/>
    </rdf:RDF>
    test
    <xsl:apply-templates/>
</xsl:template>

 <xsl:template match="/ted:TECHNICAL_SECTION">
  Technical Section
 </xsl:template>

请注意,我简化了此XSLT工具,以便专注于命名空间问题。

从XML和XSLT中删除命名空间时,转换有效。你们中有没有人知道我做错了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

AFAICT,你的样式表&#34;没有工作&#34;这是因为:

  1. 缺少</stylesheet>结束标记;

  2. 所有声明的名称空间都包含冗余的#后缀;

  3. 此模板:

    <xsl:template match="/ted:TECHNICAL_SECTION">
    ...

    与任何内容都不匹配,因为TECHNICAL_SECTION不是根元素。请尝试改为:

    <xsl:template match="ted:TECHNICAL_SECTION">
    ...