4

XSLTを学んでいます。これらの質問は明らかかもしれませんが、私は今本当に立ち往生しています。Oxygen は、次の 2 種類のエラーを返します。

  1. 「ownFunction()」の名前空間が宣言されていません。(「宣言されていない名前空間プレフィックス {xs}」)

  2. 不明なシステム関数 index-of-string()
    この Web サイトindex-of-stringから取得した XSLT 関数が認識されないようです

これは、XSL ファイルの単純化されたバージョンです。

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"     xmlns:foo="http://www.wathever.com">
<xsl:output method="xml" />

  <xsl:function name="foo:ownFunction" as="xs:string">
    <xsl:param name="string" as="xs:string"/>

        <xsl:choose>

          <xsl:when test='contains($string,"src=")'>
            <xsl:variable name="position"><xsl:value-of select="index-of-string($string,'src=')"/>+<xsl:number value="10"/></xsl:variable>
            <xsl:variable name="partString"><xsl:value-of select="substring($string,$position)"/></xsl:variable>
            <xsl:variable name="length"><xsl:value-of select="index-of-string($partString,'quot;')"/> - <xsl:number value="2"/></xsl:variable>
            <xsl:value-of select="substring($partString,1,$length)"/>
          </xsl:when>

          <xsl:otherwise>
            <xsl:value-of select="hotpot-jmatch-file/data/title"/>
          </xsl:otherwise>

        </xsl:choose>
  </xsl:function>

  <xsl:template match="/">
    <data>
      <title>
        <xsl:variable name="string"><xsl:value-of select="hotpot-jmatch-file/data/title"/></xsl:variable>
        <xsl:value-of select="foo:ownFunction($string)"/>
      </title>
    </data>
  </xsl:template>
</xsl:stylesheet>
4

2 に答える 2

5

Oxygen は、次の 2 種類のエラーを返します。

1) 'ownFunction()' の名前空間が宣言されていません。(「宣言されていない名前空間プレフィックス {xs}」)

これは実際には XML の問題です。どの XSLT スタイルシートも整形式の XML ドキュメントであるとは限りません。整形式であるための他の要件の中でも、使用される名前空間プレフィックスは、名前空間宣言で名前空間 URI にバインドする必要があります。

これを修正するには、"xs"プレフィックスを次のようにバインドします。これは、要素"http://www.w3.org/2001/XMLSchema"に追加することを意味しxmlns:xs="http://www.w3.org/2001/XMLSchema"ます (通常、この名前空間には最上位の要素が適しています。

にも同じ問題があり"foo:ownFunction"ます。"foo"使用する前に、プレフィックスをバインド/定義して表示する必要があります。xmlns:foo="my:foo"スタイルシートの一番上の要素に追加するだけです。

2) 「不明なシステム関数 index-of-string()」。この Web サイトから取得した XSLT 関数「index-of-string」が認識されないようです: http://www.xsltfunctions.com/xsl/functx_index-of-string.html

Priscilla Walmsley のサイトから関数をコピーして貼り付けるか、別のファイルに保存して (推奨)、このスタイルシート ファイルを変換にインポートまたはインクルードする<xsl:import>かを使用するのを忘れました。<xsl:include>

最後に、このような問題は、XSLT をより体系的に導入する必要があることを示しています。良い本を手に入れてよく読んでください。後悔することはありません。この回答は、XSLT および XPath の優れた学習リソースと思われるものをリストするのに役立つ場合があります。

于 2011-05-04T12:57:44.413 に答える
2

使用する

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"     xmlns:foo="http://www.wathever.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs functx""
xmlns:functx="http://www.functx.com">

<xsl:import href="location-of-functx-library.xsl"/>

...

<xsl:value-of select="functx:index-of-string($partString,'quot;')"/>

そのサンプルは、スキーマの名前空間をxs定義し、プレフィックスにバインドし、リンク先の関数ライブラリの名前空間を定義します。また、関数ライブラリの実装をダウンロードして、示されているようにインポートする必要があります。

于 2011-05-04T12:39:54.723 に答える