如何在Oxygen XML编辑器中使用XSLT 2.0将XHTML转换为XML?XSLT 1.0 的解决方案不起作用



我在使用 XSLT 2.0 stylesheet 时将XHMTL文件转换为XML遇到困难。我知道XSLT 1.0回答了这个问题,但确实对XSLT 2.0不起作用!

示例xhtml文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="de" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml">
  <head>
     <meta name="something" content="content"/>
     (...)
  </head>
  <body onload="...">
     (...)
  </body>
</html>

示例样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="xhtml:html/xhtml:head">    
     <section role="example">
        <xsl:attribute name="id" select="concat('something', meta[@name='something']/@content)"/>    
         (...)
      </section>
</xsl:stylesheet>

我无法打电话给节点。我使用的是氧XML编辑器(不幸的是,较旧的版本,但对于所有XML转换,它效果很好),我尝试了不同的处理器(Saxon-EE 9.4.0.6,Saxon He He 9.4.0.6,Saxon-Pe9.4.0.6。)。我查看了此问题XHTML到XML XSLT转换,该转换引用了XSLT 2.0,并且还试图用星号替换比赛中的命名空间,但编辑器不接受它。

在@martinhonnen的宝贵评论之后,我将XSLT更改为:

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml">
<xsl:template match="xhtml:html/xhtml:head">    
     <section role="example">
        <xsl:attribute name="id" select="concat('something', xhtml:meta[@name='something']/@content)"/>  
         (...)
      </section>
</xsl:stylesheet>

这个小的变化可以解决问题。现在可以从XHTML提取各种元信息。在由此产生的XML中的以前的样式表的情况下,就填充了"某种东西"作为id-attribute的值,例如这是校正样式表的简短示例:

    <?xml version="1.0" encoding="UTF-8"?>
  <section role="example" id="something_content">
      (...)
  </section>

再次感谢!!!!

如果您与名称空间一起使用,则必须始终使用它们,以便选择xhtml meta elements的路径 meta需要为 xhtml:meta

请注意,使用XSLT 2及以后,您可以使用xsl:stylesheet上的xpath-default-namespace="http://www.w3.org/1999/xhtml"更轻松地使您更容易,然后您可以使用E.G.match="html/head"select="meta"无需使用前缀。

相关内容

  • 没有找到相关文章

最新更新