我正在将 xhtml 文档处理为 TEI。 xhtml 文档最初是旧的 .doc 文件。创建 doc 文件的人们使用 <> 字符来指示何时将一个字母、一个或多个单词添加到原始文档中。这是文档的片段。
<p>
<X> presented <<strike>it</strike>>
to others <X> in the form of a babe, [ERASED] X [END ERASE] <at
first — and according to their belief her> <strike>her
mental conception and</strike>
<strike>they called her</strike>
spiritual conception <of man <brought forth> a material man
<and was> <strike>but</strike>
a> <strike>matter, flesh and
bones</strike> <miraculous
conception (<strike>and</strike><but>
it was n<strike>either</strike><ot>)
and> and<sup>
<a shape="rect" class="sdfootnoteanc" name="sdfootnote138anc"
href="#sdfootnote138sym">
<sup>138</sup>
</a>
</sup>
</p>
我正在使用xsl来处理xhtml,以及函数
<xsl:when test="matches($text, '<.+>', 's')">
只要没有任何嵌套对,它就可以工作。下面的文本是上面示例中的嵌套示例。
<of man <brought forth> a material man <and was> <strike>but</strike> a>
matches() 函数失败,因为对于第一个 < 它获取了它看到的第一个 > ,它与第二个 < 匹配,而不是第一个。之后事情就走下坡路了。
我正在考虑使用 sed 和 regex 来替换 &alt > 对,但我不明白这不会因为同样的原因而失败。
寻找解决此问题的好主意。
谢谢,
斯科特
下面所示的方法使用文本替换将
<>
角度转换为开始和结束 ins
标签。然后,它以反向文档顺序处理
<ins>
元素,以便嵌套在其他插入中的插入在外部插入之前得到处理。此处理包括 innerHTML
上的文本替换,以便 <ins>
元素的所有子元素都可以一起处理,无论它们是文本节点还是其他元素。
您使用哪种文本替换取决于您想要实现的目标。示例中,插入被转换为带有边框的
<span>
元素,这样就可以看到嵌套的效果了。
document.evaluate
方法完成的,但您也可以在这里使用 XSLT 处理器。
var p = document.querySelector("p");
var doc = new DOMParser().parseFromString(p.innerHTML
.replace(/</g, "<ins>")
.replace(/>/g, "</ins>"), "text/html");
var nodes = [];
for (var node, iter = doc.evaluate("//ins", doc.body, undefined, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
(node = iter.iterateNext());)
nodes.unshift(node);
for (node of nodes)
node.outerHTML = '<span>' + node.innerHTML + '</span>';
p.innerHTML = doc.body.innerHTML;
span { display: inline-block; border: 1px solid black; margin: 1px; }
<p>
<X> presented <<strike>it</strike>> to others <X> in the form of a babe, [ERASED] X [END ERASE] <at first — and according to their belief her> <strike>her
mental conception and</strike>
<strike>they called her</strike> spiritual conception <of man <brought forth> a material man <and was> <strike>but</strike> a> <strike>matter, flesh and
bones</strike> <miraculous conception (<strike>and</strike><but> it was n<strike>either</strike><ot>) and> and<sup>
<a shape="rect" class="sdfootnoteanc" name="sdfootnote138anc"
href="#sdfootnote138sym">
<sup>138</sup>
</a>
</sup>
</p>