将XML作为参数传递并解析为XSLT 2.0

时间:2014-06-16 01:21:27

标签: xslt

我试图找出如何将XML传递到XSLT文档并像在任何节点上一样解析它。

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:param name="xmlparam"></xsl:param>

    <xsl:template match="/">
        <xsl:value-of select="node()"></xsl:value-of>
        <xsl:value-of select="$xmlparam/coll"></xsl:value-of>
    </xsl:template>
</xsl:stylesheet>

xmlparam:

<?xml version="1.0" encoding="UTF-8"?>

<coll>
    <title>Test</title>
    <text>Some text</text>
</coll>

输入:

<?xml version="1.0" encoding="UTF-8"?>

<coll>
    Root doc
</coll>

输出:

<?xml version="1.0" encoding="UTF-8"?>
    Root doc

XPTY0019: Required item type of first operand of '/' is node(); supplied value has item type xs:untypedAtomic

有谁知道如何解析作为XSLT参数传入的XML?由于某些限制,我无法读取文件,它需要是一个参数。

1 个答案:

答案 0 :(得分:0)

您可以使用文档函数来获取样式表解析的XML输入,例如:喜欢(从记忆中,所以可能不完全准确)

<xsl:variable name="myData" select="document('myData')"/>

使用您的Transformer注册自定义URIResolver。此自定义URIResolver将"myData"作为其href方法的参数resolve的值,然后可以从例如String方法获取文档的内容。一个Transformer myTransformer = getMyTransformer(); String myXmlDocument = getMyXmlDocumetAsString(); URIResolver myURIResolver = new MyURIResolver(); myURIResolver.put("myData", myXmlDocument); myTransformer.setURIResolver(myURIResolver); myTransformer.transform(source, result); 。这将为您提供与将内容添加为参数大致相同的灵活性。

代码草图(假设MyURIResolver的明显实现):

|