加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 使用XSLT和逐字地声明元素有什么区别?

发布时间:2020-12-16 23:24:42 所属栏目:百科 来源:网络整理
导读:我刚刚开始使用XSLT,并且想知道使用 xsl:element之间的有效区别是什么.用于定义元素而不是在XSLT中将它们声明为文字.例如,让我们简化一个案例,我将一个小型 XML文档的内容转换为(x)HTML. 1.我可以使用 xsl:element办法: xsl:element name="h1" xsl:value-
我刚刚开始使用XSLT,并且想知道使用< xsl:element>之间的有效区别是什么.用于定义元素而不是在XSLT中将它们声明为文字.例如,让我们简化一个案例,我将一个小型 XML文档的内容转换为(x)HTML.

1.我可以使用< xsl:element>办法:

<xsl:element name="h1">
    <xsl:value-of select="heading"/>
</xsl:element>

2.或者手动定义元素:

<h1>
    <xsl:value-of select="heading"/>
</h1>

这两者之间的实际差异是什么,如果存在差异,哪些被认为是“好风格”?

解决方法

它们几乎完全相同,例外是文字< h1> element将向结果树添加样式表中该点范围内的命名空间节点,而< xsl:element name =“h1”>惯于.这与输出的不同之处取决于样式表包含的命名空间声明的确切位置以及结果树中使用它们的位置(如果有的话).例如,针对任何输入XML文档运行以下转换:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:foo="http://example.com">

  <xsl:output method="xml" indent="yes" />

  <xsl:template match="/">
    <root>
      <foo:element1 />
      <foo:element2 />
    </root>
  </xsl:template>
</xsl:stylesheet>

产生以下输出(使用xsltproc):

<?xml version="1.0"?>
<root xmlns:foo="http://example.com">
  <foo:element1/>
  <foo:element2/>
</root>

但更改文字< root>在样式表中< xsl:element name =“root”>而是产生

<?xml version="1.0"?>
<root>
  <foo:element1 xmlns:foo="http://example.com"/>
  <foo:element2 xmlns:foo="http://example.com"/>
</root>

作为< xsl:element> form不会将“foo”命名空间节点附加到生成的元素.如果这很重要,并且您确实希望将样式表命名空间声明复制到使用< xsl:element>创建的元素上.你可以通过嵌套这样的东西来做到这一点

<xsl:copy-of select="document('')/*/namespace::foo" />

直接在其中(使用文档(”)的成语,它提供对样式表XML文档本身的访问).

但一般来说,主要使用< xsl:element>是计算元素名称而不是“编译时”文字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读