bekomme Ich schreibe ein XSL und unten ist meine Anforderung.kann nicht wissen, wie man den Wert von Baum
- Wann immer ich auf ein
superscript
kommen, die gesamten XML-Suche und eine listitem mit dem Attribute override und hte Wert sehen soll diesuperscript
gleich sein. - wenn es gefunden wird anwenden Vorlagen auf demselben
Unten ist mein XML
<?xml version="1.0" encoding="UTF-8"?>
<division>
<superscript>1</superscript>
<page num="1"/>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</division>
Und hier ist mein XSL
<xsl:template match="superscript[name(ancestor::*[last()]) = 'division']">
<xsl:apply-templates select="//listitem[@override=.]/preceding::page[1]" mode="first"/>
<xsl:variable name="cnt" select="count(preceding::superscript)+1"/>
<xsl:variable name="varHeaderNote" select='concat("f",$cnt)'/>
<xsl:variable name="varFootNote" select='concat("#ftn.",$cnt)'/>
<sup>
<a name="{$varHeaderNote}" href="{$varFootNote}" class="tr_ftn">
<xsl:value-of select="."/>
</a>
</sup>
</xsl:template>
<xsl:template match="page" mode="first">
<xsl:variable name="pb" select="./@num"/>
<xsl:processing-instruction name="pb">
<xsl:text>label='</xsl:text>
<xsl:value-of select="$pb"/>
<xsl:text>'</xsl:text>
<xsl:text>?</xsl:text>
</xsl:processing-instruction>
<a name="{concat('pg_',$pb)}"/>
</xsl:template>
mein aktuelles O/p
<!DOCTYPE html
PUBLIC "XSLT-compat">
<hmtl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New Version!</title>
</head>
<sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup>
<page num="1"></page>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</hmtl>
Erwartete O/p:
<!DOCTYPE html
PUBLIC "XSLT-compat">
<hmtl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>New Version!</title>
</head>
<?pb label='1'?>
<sup><a name="f1" href="#ftn.1" class="tr_ftn">1</a></sup>
<page num="1"></page>
<note role="para-footnote">
<orderedlist>
<listitem override="1">
<para>Hi</para>
</listitem>
</orderedlist>
</note>
</hmtl>
Hier ist eine Arbeits Geige. http://xsltransform.net/ejivdGR
Bitte lassen Sie mich wissen, wo ich falsch liege und wie ich das beheben kann.
Dank
Hallo Freund, danke, das funktioniert genial :-), aber eine kleine Frage, ist nicht '.' gleich wie' current() '? – user3872094
Innerhalb des Prädikats nicht, nein, mit '// listitem [@override =.]' Das '.' ist das' listitem', auf das Sie das Prädikat angewendet haben, so dass Sie im Grunde das '@ override' Attribut des' listitems vergleichen 'Element zum (Zeichenfolgenwert des) Listeneintrags selbst. 'current()' bezieht sich auf das aktuelle Kontextelement, wie in https://www.w3.org/TR/xslt20/#current-function definiert. –