一般 JavaScriptを含むXMLを変更しようとしています。 JavaScriptがページトップレベルの1つを参照している場合は、トップレベルの階層レベルを追加したいと思います。XSLT:グローバル変数を属性値に設定する
細目 私は新しいトップレベル(formNameフォーム)を見つけると、彼らはページトップレベル(ページ名とsubPageNames)で始まる割り当てを持っている場合、スクリプトに追加します。私はXMLSpyでこれを実行しようとしましたが、変数formNameに値を設定することさえできません。これを解決する最善の方法は何ですか?
私の例のXML:
<?xml version="1.0" encoding="UTF-8"?>
<template>
<subform name="formABC">
<pageSet>
<pageArea name="Page1">
<subform>
<field>
<event>
<script>this.rawValue = SubPageA.subhuvud.namn.rawValue;</script>
</event>
</field>
<field>
<event>
<script>this.rawValue = not_this.rawValue;</script>
</event>
</field>
</subform>
</pageArea>
<pageArea name="Page2">
<field>
<event>
<script>this.rawValue = SubPageK.subhuvud.namn.rawValue;</script>
</event>
</field>
<area>
<field>
<event>
<script>this.rawValue = Page1.subhuvud.namn.rawValue;</script>
</event>
</field>
<field>
<event>
<script>this.rawValue = other.rawValue;</script>
</event>
</field>
</area>
</pageArea>
</pageSet>
<subform name="SubPageA">
</subform>
<subform name="SubPageK">
</subform>
</subform>
</template>
私の現在のXSL:私が求めて
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"
xmlns:xdp="http://ns.adobe.com/xdp/">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="formName" select="/xdp:xdp/template/subform/@name"/>
<xsl:variable name="pageNames" select="/xdp:xdp/template/subform/subform/@name"/>
<xsl:variable name="subPageNames" select="/xdp:xdp/template/subform/pageSet/pageArea/@name"/>
<xsl:variable name="allPageNames" select="concat($pageNames, $subPageNames)"/>
<!-- Identity rule.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!--Rewite Javascript-->
<!--Insert formname in front of page that is first.-->
<xsl:template match="//script">
<xsl:variable name="match" select="exsl:node-set($allPageNames)[contains(current(), .)]"/>
<xsl:choose>
<xsl:when test="$match"> <!--this.rawValue = Page1.subhuvud.namn.rawValue;-->
<xsl:value-of select="substring-before(., $match)"/> <!--this.rawValue = -->
<xsl:value-of select="$formName"/> <!--formABC-->
<xsl:value-of select="'.'"/> <!--.-->
<xsl:value-of select="$match"/> <!--Page1-->
<xsl:value-of select="substring-after(., $match)"/> <!--.subhuvud.namn.rawValue;-->
</xsl:when> <!--this.rawValue = formABC.Page1.subhuvud.namn.rawValue;-->
<xsl:otherwise>
<xsl:copy/>
<xsl:apply-templates select="node()|@*"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
出力:バインド変数の値に関しては
<?xml version="1.0" encoding="UTF-8"?>
<template>
<subform name="formABC">
<pageSet>
<pageArea name="Page1">
<subform>
<field>
<event>
<script>this.rawValue = formABC.SubPageA.subhuvud.namn.rawValue;</script>
</event>
</field>
<field>
<event>
<script>this.rawValue = not_this.rawValue;</script>
</event>
</field>
</subform>
</pageArea>
<pageArea name="Page2">
<field>
<event>
<script>this.rawValue = formABC.SubPageK.subhuvud.namn.rawValue;</script>
</event>
</field>
<area>
<field>
<event>
<script>this.rawValue = formABC.Page1.subhuvud.namn.rawValue;</script>
</event>
</field>
<field>
<event>
<script>this.rawValue = other.rawValue;</script>
</event>
</field>
</area>
</pageArea>
</pageSet>
<subform name="SubPageA">
</subform>
<subform name="SubPageK">
</subform>
</subform>
</template>
私が最初に気づくのは、あなたの変数バインドに 'SELECT'式はルート要素が' 'になることを想定していることですが、それはそれが何であるかではありませんあなたの入力例では。 –
私はstackoverflowのためにそれを単純化する前に、元のXML構造の残りのthats、はい。 –