English 中文(简体)
XSLT 深层标签空间,而不是元素名称
原标题:
  • 时间:2009-05-19 22:02:22
  •  标签:

我有一份XSL文件,以移交另一个XSL档案。 我想说的是,“空间宣言”是根本的主角,而不是在每一个要素上重复!

我的风格是:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:mynamespace="somenamespace" version="2.0">
    <xsl:output method="xml" omit-xml-declaration="no" standalone="yes" indent="yes" />
    <xsl:template match="myMatchedNode">
        <mynamespace:tag>Some text i want inserted into the xsl</mynamespace:tag>
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" /></xsl:copy>
    </xsl:template>
</xsl:stylesheet>

它产生了这样的结果:

....

<mynamespace:tag xmlns:mynamespace="somenamespace">Some text i want inserted into the xsl</mynamespace:tag>

....

如何把“空间宣言”推到结果的深层?

最佳回答

你们需要把名字放在你结果树的文件内容上。 根据您是否重新使用XSLT 1.0或2.0,可以采取几种方式做到这一点。 以下是2个解决方案。 我假定你在投入文件上重新做经过修改的特性转变(问题实际上没有具体说明):

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

  <!-- special rule for the document element -->
  <xsl:template match="/*">
    <xsl:copy>
      <!-- Add a namespace node -->
      <xsl:namespace name="mynamespace" select=" somenamespace "/>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

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

  <!-- the rest of your rules -->

</xsl:stylesheet>

为了在你的产出文件中全面涵盖所有控制名称空间的不同技术,在我的网站上查看了

问题回答

也许我误解了这个问题,但我认为你应该这样做:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="somenamespace"
    version="2.0">

<xsl:output method="xml" omit-xml-declaration="no" standalone="yes"  indent="yes"/>

<xsl:template match="myMatchedNode">
  <tag>Some text i want inserted into the xsl</mynamespace>

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

</xsl:stylesheet>

这将使你能够使用你的名称空间标签作为缺省名称空间,而产出文件也将把它们作为缺省名称空间。 你的文稿仍然可以使用新名称:帽子。

你也可以尝试这样做:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="somenamespace"
    xmlns:mynamespace="somenamespace"
    version="2.0">

我并不完全相信会取代我的名词空间:主角不过是,如果是的话,可能取决于执行。





相关问题
热门标签