使用xforms在元素中包装文本

时间:2016-03-15 08:18:39

标签: xforms exist-db xsltforms

有没有办法使用xforms在元素中包装标记文本?例如:

在此word周围添加标记 - &GT; 在此<tag></tag>

周围添加标记

我是xforms的新手,目前在exists-db服务器上使用Xsltxforms,我正在试图弄清楚我是否遗漏了某些东西,或者在textarea框中没有办法制作这样的东西。提前谢谢!

2 个答案:

答案 0 :(得分:2)

XForms Recommendation中没有针对此类处理的机制。

但是这已被添加为XSLTForms中的扩展:一个额外的动作,名为&#34; xf:wrap&#34;允许在控制时指示,以及在选择之前和之后要添加的内容。

<?xml-stylesheet href="xsl/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
    <title>Wrap Selection</title>
    <xf:model>
        <xf:instance>
            <data xmlns="">Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo.</data>
        </xf:instance>
    </xf:model>
</head>
<body>
    <xf:trigger>
        <xf:label>&lt;a&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;a&gt;" post="&lt;/a&gt;"/>
    </xf:trigger>
    <xf:trigger>
        <xf:label>&lt;b&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;b&gt;" post="&lt;/b&gt;"/>
    </xf:trigger>
    <xf:trigger>
        <xf:label>&lt;c&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;c&gt;" post="&lt;/c&gt;"/>
    </xf:trigger>
    <br/>
    <xf:textarea id="t" ref="." incremental="true"/>
    <br/>
    <xf:output value=".">
        <xf:label>Value: </xf:label>
    </xf:output>
</body>
</html>

xf:setselection操作还有另一种可能性:

<?xml-stylesheet href="xsl/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
    <title>Set Selection</title>
    <xf:model>
        <xf:instance>
            <data xmlns="">Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium...</data>
        </xf:instance>
    </xf:model>
</head>
<body>
    <xf:trigger>
        <xf:label>&lt;span&gt;</xf:label>
        <xf:setselection ev:event="DOMActivate" control="t" value="concat('&lt;span start=&quot;', control-property('t', 'selectionStart'), '&quot; end=&quot;', control-property('t', 'selectionEnd'), '&quot;&gt;', selection('t'), '&lt;/span&gt;')"/>
    </xf:trigger>
    <br/>
    <xf:textarea id="t" ref="." incremental="true"/>
    <br/>
    <xf:output value=".">
        <xf:label>Value: </xf:label>
    </xf:output>
</body>
</html>

现场演示:http://www.agencexml.com/direct/wrap/setselection.xml

您怎么看?

答案 1 :(得分:2)

修正后的答案:一些可能的解决方案是将诸如Rangy(https://github.com/timdown/rangy)之类的库集成到XSLTForms中,甚至是像TinyMCE这样的富文本编辑器(XSLTForms在此示例中执行此操作:http://www.agencexml.com/xsltforms/tinymce.xml )。另一个选择是查看专为TEI设计的Teian(https://sourceforge.net/projects/teian/),但可能是朝着正确方向迈出的一步。