0

我有一个试图通过 XSL 文件转换的 XML 文件。一旦我向我的 XSL 的根元素添加了一个非空白 xmlns 属性,转换只会给我带来所有内容的空白数据。如果我删除或清空 xmlns 属性,我会得到我所期望的。

谁能告诉我为什么会这样,所以我可以阻止它!

这是我的一些 XSL(省略了一些部分并替换为 ...):

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

  <xsl:import href="html_commonstructures.xsl"/>
  <xsl:output method="html"/>

  <xsl:template match="/">
    <div>
    <xsl:call-template name="ServiceStructure">
      <xsl:with-param name="structure" select="ServiceDescription" />
    </xsl:call-template>
    </div>
  </xsl:template>

  <xsl:template name="ServiceStructure">
    <xsl:param name="structure"/>
    <h3>
      <xsl:value-of select="$structure/DC.Title" /> (<xsl:value-of select="$structure/DC.Identifier" />)
    </h3>
    <!-- And so on -->
  </xsl:template>
</xsl:stylesheet>

* 编辑 * 这是 html_commonstructures 中的一个片段:

<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:rxr="http://ilrt.org/discovery/2004/03/rxr/" xmlns:esd="http://www.esd.org.uk/standards"
    xmlns:core="http://www.govtalk.gov.uk/core" xmlns:n2="http://www.govtalk.gov.uk/metadata/egms"
    xmlns:apd="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"
    xmlns:con="http://www.govtalk.gov.uk/people/ContactTypes"
    xmlns:bs7666="http://www.govtalk.gov.uk/people/bs7666">

  <!-- A template for the ControlledListStructures -->
  <xsl:template name="ControlledListStructure">
    <xsl:param name="structure"/>

    <p class="controlledlist">
      <xsl:value-of select="$structure/text()" />
      <xsl:if test="$structure/@Id | $structure/@ConceptId | $structure/@ItemName | $structure/@ListName">
        <span class="metainfo">[
          <xsl:if test="$structure/@Id">
            ID: <xsl:value-of select="$structure/@Id" />;
          </xsl:if>
          <xsl:if test="$structure/@ConceptId">
            Concept ID: <xsl:value-of select="$structure/@ConceptId" />;
          </xsl:if> 
          <xsl:if test="$structure/@ItemName">
            Item Name: <xsl:value-of select="$structure/@ItemName" />;
          </xsl:if>
          <xsl:if test="$structure/@ListName">
            List Name: <xsl:value-of select="$structure/@ListName" />
          </xsl:if>
          ]
        </span>
      </xsl:if>
    </p>
  </xsl:template>
</xsl:stylesheet>
4

2 回答 2

4

为什么首先添加 xmlns 命名空间定义?

通过添加 xmlns 属性,您可以更改 XSLT 的默认名称空间。然后,您必须调整所有表达式以使用输入文档的命名空间,即使用自由前缀添加输入文档的命名空间定义,并将表达式“ServiceDesription”替换为“myPrefix:ServiveDescription”。

于 2009-03-17T14:57:49.283 回答
2

如果您在 XML 文档上有一个名称空间,那么您需要在 XSLT 上有相同的名称空间。

于 2009-03-17T14:58:41.153 回答