使用 xforms 在元素中包装文本

Wrap text in element using xforms

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

在这个周围加上标签 word --> 在这个 <tag>word</tag>

周围加上标签

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

XForms Recommendation 中没有用于此类处理的机制。

但这已作为扩展添加到 XSLTForms 中:一个名为 "xf:wrap" 的额外操作允许指示要考虑的控件以及在选择之前和之后要添加的内容。

<?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

你怎么看?

修改后的答案:一些可能的解决方案是集成一个库,例如专为 TEI 设计的 Rangy (https://github.com/timdown/rangy) into XSLTForms, or even a rich-text editor such as TinyMCE (which XSLTForms does in this example: http://www.agencexml.com/xsltforms/tinymce.xml). Another option would be to look at Teian(https://sourceforge.net/projects/teian/),但可能是朝着正确方向迈出的一步。