在XSLT转换中定义自定义标记

时间:2012-04-11 11:53:26

标签: php xml xslt rss xslt-1.0

我使用php DOMDocument for XSLT将一个XML转换为另一个XML,我需要在结果文档标记中使用其他标记 - mytag ,如

<mytag:full-text>...</mytag:full-text>

定义这个标签我尝试了这样的结构:

<xsl:namespace-alias stylesheet-prefix="mytag" result-prefix="mytag"/>

因此我收到错误

Warning: DOMDocument::load() [domdocument.load]: Namespace prefix mytag on full-text is not defined

我做错了什么?

2 个答案:

答案 0 :(得分:2)

以下是完整的代码示例

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:mytag="my:tag" exclude-result-prefixes="mytag">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="b">
  <b>
    <mytag:full-text>Some full-text here</mytag:full-text>
  </b>
 </xsl:template>
</xsl:stylesheet>

对以下XML文档应用此转换时:

<a><b/></a>

生成了想要的正确结果(b下添加的新元素):

<a>
   <b>
      <mytag:full-text xmlns:mytag="my:tag">Some full-text here</mytag:full-text>
   </b>
</a>

答案 1 :(得分:1)

尝试将xmlns:mytag =“some_namespace”添加到XSLT的根目录,以便得到类似的内容

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:mytag="some_namespace">