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



我使用 php DOMDocument 进行 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

我做错了什么?

下面是如何执行此操作的完整代码示例

<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>

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

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

相关内容

  • 没有找到相关文章

最新更新