我是XSLT的新手。
我需要读取URL并将其部分值转换为XML。 我编写了一个XSLT,它必须将URL作为输入值,并从URL值的某些内容创建XML文件。
当我在XMLSPY中调试XSLT时,我注意到以下代码中的 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>
答案 0 :(得分: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,根据文本文档的编码,您需要在调用函数时添加第二个参数。