我试图弄清楚如何将 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>
Run Code Online (Sandbox Code Playgroud)
xml参数:
<?xml version="1.0" encoding="UTF-8"?>
<coll>
<title>Test</title>
<text>Some text</text>
</coll>
Run Code Online (Sandbox Code Playgroud)
输入:
<?xml version="1.0" encoding="UTF-8"?>
<coll>
Root doc
</coll>
Run Code Online (Sandbox Code Playgroud)
输出:
<?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
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解析作为参数传入 XSLT 的 XML?由于某些限制,我无法读取文件,它需要是一个参数。
您可以使用文档函数让样式表解析您的 XML 输入,例如(从内存中,所以可能不完全准确)
<xsl:variable name="myData" select="document('myData')"/>
Run Code Online (Sandbox Code Playgroud)
并使用您的 Transformer 注册自定义 URIResolver。此自定义 URIResolver 将获取其方法的"myData"参数值,然后可以从例如 a 中获取文档的内容hrefresolveString。这将为您提供与添加内容作为参数大致相同的灵活性。
代码草图(假设 MyURIResolver 的明显实现):
Transformer myTransformer = getMyTransformer();
String myXmlDocument = getMyXmlDocumetAsString();
URIResolver myURIResolver = new MyURIResolver();
myURIResolver.put("myData", myXmlDocument);
myTransformer.setURIResolver(myURIResolver);
myTransformer.transform(source, result);
Run Code Online (Sandbox Code Playgroud)