1

私は XSLT の初心者です。

URL を読み取り、その値の一部を XML に変換する必要があります。URL を入力値として受け取り、URL 値のコンテンツの一部から XML ファイルを作成する XSLT を作成しました。

XMLSPY で XSLT をデバッグしたところ、以下のコードで URL 値がinputValue変数によって取得されていないことに気付きました。URLテンプレートの一致を入力する私のアプローチが間違っているかどうかはわかりません。

どんな助けでも大歓迎です。

前もって感謝します。

XSLT への入力:

http://host:port/abc/xyz1/6xyz6?qq=123&pp=3

ここで XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nnc="Nnc" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
    <xsl:param name="inVal" select="xs:string(http://host:port/abc/xyz1/6xyz6?qq=123&pp=3)"/>
    <xsl:template match="/">
        <xsl:variable name="inputValue" select="$inVal"/>
            <xsl:if test="string-length($inputValue)=0">
                <xsl:message terminate="yes">
                inputValue is blank
                </xsl:message>
            </xsl:if>
            <xsl:variable name="value" as="xs:string" select="substring-after($inputValue, 'abc/' )"/>
            <xsl:variable name="tokenizedValues" select="tokenize($value,'/')"/>
            <xsl:for-each select="$tokenizedValues">
                <xsl:if test="position() = 1">
                    <id>
                        <xsl:value-of select="."/>
                    </id>
                </xsl:if>
            </xsl:for-each>
        </xsl:template>
</xsl:stylesheet>

目的の XML 出力:

<?xml version="1.0" encoding="UTF-8"?>
<id>6xyz6</id>
<qq>123</qq>
<pp>123</pp>
4

1 に答える 1

1

テキスト ファイルを取得したい場合は、XSLT 2.0 以降でそれを行うことができますが、単に URL を使用するのではなく、unparsed-text関数を呼び出す必要があります。

<xsl:variable name="inputData" as="xs:string" select="unparsed-text('http://example.com/foo')"/>

http://www.w3.org/TR/xslt20/#unparsed-textを参照してください。テキスト ドキュメントのエンコーディングによっては、関数を呼び出すときに 2 番目のパラメーターを追加する必要があります。

于 2013-07-27T09:03:40.500 に答える