如何使用XSLT 3通过模板遍历解析xml片段结果的未知内容?

如何使用XSLT 3通过模板遍历解析xml片段结果的未知内容?,xslt,saxon,xslt-3.0,Xslt,Saxon,Xslt 3.0,晚上好, 我在使用XSL-T3.0将“解析xml片段”的结果传递给模板时遇到问题。我使用的是Saxon PE 9.7.0.15(Java版本捆绑在最新的oXygen 19中)。我希望能够将(已经)定义的模板应用于“parse xml fragment”生成的“document node”,就好像它是原始xml文档的一部分,而不是一个已定义属性的base64内容一样。换句话说,我需要遍历“解析xml片段”结果的未知内容 例如,我可以从base64内容中获取值 <xsl:value-of se

晚上好,

我在使用XSL-T3.0将“解析xml片段”的结果传递给模板时遇到问题。我使用的是Saxon PE 9.7.0.15(Java版本捆绑在最新的oXygen 19中)。我希望能够将(已经)定义的模板应用于“parse xml fragment”生成的“document node”,就好像它是原始xml文档的一部分,而不是一个已定义属性的base64内容一样。换句话说,我需要遍历“解析xml片段”结果的未知内容

例如,我可以从base64内容中获取值

<xsl:value-of select="parse-xml-fragment(saxon:base64Binary-to-string(./@a, 'UTF-8'))/base64Root/a/@at"/>

非常感谢您事先的帮助。Stepan

我只需将带有
应用模板的节点推送到模板匹配元素节点,我不确定您为什么首先调用模板:

<?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:math="http://www.w3.org/2005/xpath-functions/math"
    xmlns:saxon="http://saxon.sf.net/"
    exclude-result-prefixes="xs math saxon"
    version="3.0">

    <xsl:output method="text" />

    <xsl:template match="/root">
        <xsl:next-match/>
        <xsl:apply-templates select="parse-xml-fragment(saxon:base64Binary-to-string(@a, 'UTF-8'))/node()"/>
    </xsl:template>

    <xsl:template match="*">
        <xsl:value-of select="local-name(), @*" separator="&#10;"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:apply-templates/>   
    </xsl:template>

</xsl:stylesheet>

是的,很好,很简单,很有效!非常感谢你!
<?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
<?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:math="http://www.w3.org/2005/xpath-functions/math"
    xmlns:saxon="http://saxon.sf.net/"
    exclude-result-prefixes="xs math saxon"
    version="3.0">

    <xsl:output method="text" />

    <xsl:template match="/root">
        <xsl:next-match/>
        <xsl:apply-templates select="parse-xml-fragment(saxon:base64Binary-to-string(@a, 'UTF-8'))/node()"/>
    </xsl:template>

    <xsl:template match="*">
        <xsl:value-of select="local-name(), @*" separator="&#10;"/>
        <xsl:text>&#10;</xsl:text>
        <xsl:apply-templates/>   
    </xsl:template>

</xsl:stylesheet>
root
PGJhc2U2NFJvb3Q+PGEgYXQ9IjEiPjwvYT48YiBhdD0iMiI+PC9iPjwvYmFzZTY0Um9vdD4=
base64Root
a
1
b
2