2
晚上好,如何使用XSLT 3使用模板遍歷parse-xml-fragment結果的未知內容?
我有一個問題,將「parse-xml-fragment」的結果傳遞給使用XSL-T 3.0的模板。我正在使用Saxon-PE 9.7.0.15(Java版本捆綁在最新的oXygen 19中)。我希望能夠將已定義的模板應用於從「parse-xml-fragment」中生成的「文檔節點」,就好像它是原始XML文檔的一部分,而不是一個已定義屬性的base64內容。換句話說,我需要瀏覽「parse-xml-fragment」結果的未知內容。
我能夠使用例如
<xsl:value-of select="parse-xml-fragment(saxon:base64Binary-to-string(./@a, 'UTF-8'))/base64Root/a/@at"/>
擺脫的base64內容的價值,但它假設,我知道的結構和給定的屬性的base64值的內容,我不知道。
XML文件是:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="a.xsl"?>
<root a="PGJhc2U2NFJvb3Q+PGEgYXQ9IjEiPjwvYT48YiBhdD0iMiI+PC9iPjwvYmFzZTY0Um9vdD4="/>
<!--
content of @a is (and may vary in structure and content):
<base64Root><a at="1"></a><b at="2"></b></base64Root>
-->
XSL-T 3.0文件(不工作,我想)是:
<?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" xmlns:saxon="http://saxon.sf.net/" exclude-result-prefixes="xs" version="3.0">
<xsl:output method="text" />
<xsl:template match="/root">
<xsl:call-template name="anyElement">
<xsl:with-param name="xmlFragment" select="parse-xml-fragment(saxon:base64Binary-to-string(./@a, 'UTF-8'))"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="anyElement" match="*">
<xsl:param name="xmlFragment"/>
<xsl:value-of select="local-name(.)"/>
<xsl:value-of select="./@at"/>
<xsl:apply-templates>
<xsl:with-param name="xmlFragment" select="."/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
所需的輸出是一樣的東西(格式現在已並不重要) :
root
PGJhc2U2NFJvb3Q+PGEgYXQ9IjEiPjwvYT48YiBhdD0iMiI+PC9iPjwvYmFzZTY0Um9vdD4=
base64Root
a
1
b
2
非常感謝您的幫助提前。斯捷潘
是的,偉大的,這麼簡單,它的工作原理!非常感謝你! –