读取非xml数据时的XSLT问题

读取非xml数据时的XSLT问题,xslt,Xslt,我是XSLT的新手 我需要读取URL并将其某些值转换为XML。 我编写了一个XSLT,它必须将URL作为输入值,并从URL值的一些内容创建一个XML文件 在XMLSPY中调试XSLT时,我注意到下面代码中的inputValue变量没有提取URL值。我不确定我输入URL和模板匹配的方法是否错误 感谢您的帮助 提前谢谢 XSLT的输入: http://host:port/abc/xyz1/6xyz6?qq=123&pp=3 这里是XSLT: <?xml version="1.0" e

我是XSLT的新手

我需要读取URL并将其某些值转换为XML。 我编写了一个XSLT,它必须将URL作为输入值,并从URL值的一些内容创建一个XML文件

在XMLSPY中调试XSLT时,我注意到下面代码中的inputValue变量没有提取URL值。我不确定我输入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>

inputValue为空
所需的XML输出:

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

6xyz6
123
123

如果你想拉入一个文本文件,那么使用XSLT 2.0和更高版本,你可以做到这一点,但不是简单地使用URL,你需要调用
unparsed text
函数,例如

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


请参阅,根据文本文档的编码,在调用函数时需要添加第二个参数。

如果您想要拉入文本文件,那么使用XSLT 2.0和更高版本可以做到这一点,但不只是使用URL,您需要调用
未解析文本
函数,例如

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


请参阅,根据文本文档的编码,在调用函数时需要添加第二个参数。

当前结果是什么?如果我没有弄错的话,XSLT的输入必须是XML文档(即使它只是一个空元素)。因此,您的输入可能类似于
http://host:port/abc/xyz1/6xyz6?qq=123&pp=3
,您可以在该模板中以
的形式访问它。当前结果为空,因为inputValue为空。我使用的是XSLT 2.0,根据文档,它允许非XML数据作为输入…好的,
$inVal
是一个参数,因此除非您将值作为参数传入,否则我认为$inVal不会有您想要的值。试试
获取输入值怎么样,如:
?您的意思是将此更改为。如果是这样,inputValue将整个xslt作为文档,而不是url作为值。很抱歉给你带来困惑,因为我是一个新手-代码示例非常感谢。谢谢在XSLT2.0中,如果使用主输入文档和
模板匹配=“/”
,则需要提供XML文档。但是,正如我在回答中所示,您可以将文本文档作为辅助输入读取,如果您没有也不想要XML输入,则可以使用命名模板开始转换(例如,
您当前的结果是什么?如果我没有弄错,XSLT的输入必须是XML文档)(即使它只是一个空元素).因此,您的输入可能类似于
http://host:port/abc/xyz1/6xyz6?qq=123&pp=3
,您可以在该模板中以
的形式访问它。当前结果为空,因为inputValue为空。我正在使用XSLT 2.0,根据文档,它允许非XML数据作为输入…好的,
$inVal
是一个参数,所以如果不将值作为参数传入,我认为$inVal将不会具有您想要的值。不如尝试
获取输入值,如:
?您的意思是将其更改为。如果是,inputValue将整个xslt作为文档,而不是url作为值。很抱歉出现了混淆ion作为一个新手,非常感谢您的代码示例。感谢您使用XSLT2.0,如果您使用的是主输入文档和
template match=“/”
,您需要输入一个XML文档。但是,正如我在回答中所示,您可以将文本文档作为辅助输入读取,如果您没有也不需要XML输入,则可以使用命名模板(例如