如何替换一些非常糟糕的 xhtml 中的 <> 字符

问题描述 投票:0回答:1

我正在将 xhtml 文档处理为 TEI。 xhtml 文档最初是旧的 .doc 文件。创建 doc 文件的人们使用 <> 字符来指示何时将一个字母、一个或多个单词添加到原始文档中。这是文档的片段。

<p>
&lt;X&gt; presented &lt;<strike>it</strike>&gt;
to others &lt;X&gt; in the form of a babe, [ERASED] X [END ERASE] &lt;at
first &#8212; and according to their belief her&gt; <strike>her
mental conception and</strike>
         <strike>they called her</strike>
spiritual conception &lt;of man &lt;brought forth&gt; a material man
&lt;and was&gt; <strike>but</strike>
a&gt; <strike>matter, flesh and
bones</strike> &lt;miraculous
conception (<strike>and</strike>&lt;but&gt;
it was n<strike>either</strike>&lt;ot&gt;)
and&gt; and<sup>
            <a shape="rect" class="sdfootnoteanc" name="sdfootnote138anc"
               href="#sdfootnote138sym">
               <sup>138</sup>
            </a>
         </sup>
</p>

我正在使用xsl来处理xhtml,以及函数

<xsl:when test="matches($text, '&lt;.+&gt;', 's')">

只要没有任何嵌套对,它就可以工作。下面的文本是上面示例中的嵌套示例。

&lt;of man &lt;brought forth&gt; a material man &lt;and was&gt; <strike>but</strike> a&gt;

matches() 函数失败,因为对于第一个 < 它获取了它看到的第一个 > ,它与第二个 < 匹配,而不是第一个。之后事情就走下坡路了。

我正在考虑使用 sed 和 regex 来替换 &alt > 对,但我不明白这不会因为同样的原因而失败。

寻找解决此问题的好主意。

谢谢,

斯科特

html xml xslt document translate
1个回答
0
投票

下面所示的方法使用文本替换将

<>
角度转换为开始和结束
ins
标签。然后,它以
反向文档顺序
处理<ins>元素,以便嵌套在其他插入中的插入在外部插入之前得到处理。此处理包括
innerHTML
上的文本替换,以便
<ins>
元素的所有子元素都可以一起处理,无论它们是文本节点还是其他元素。

您使用哪种文本替换取决于您想要实现的目标。示例中,插入被转换为带有边框的

<span>
元素,这样就可以看到嵌套的效果了。

处理是使用

document.evaluate
方法完成的,但您也可以在这里使用 XSLT 处理器。

var p = document.querySelector("p");
var doc = new DOMParser().parseFromString(p.innerHTML
  .replace(/&lt;/g, "<ins>")
  .replace(/&gt;/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>
  &lt;X&gt; presented &lt;<strike>it</strike>&gt; to others &lt;X&gt; in the form of a babe, [ERASED] X [END ERASE] &lt;at first &#8212; and according to their belief her&gt; <strike>her
mental conception and</strike>
  <strike>they called her</strike> spiritual conception &lt;of man &lt;brought forth&gt; a material man &lt;and was&gt; <strike>but</strike> a&gt; <strike>matter, flesh and
bones</strike> &lt;miraculous conception (<strike>and</strike>&lt;but&gt; it was n<strike>either</strike>&lt;ot&gt;) and&gt; and<sup>
            <a shape="rect" class="sdfootnoteanc" name="sdfootnote138anc"
               href="#sdfootnote138sym">
               <sup>138</sup>
  </a>
  </sup>
</p>

© www.soinside.com 2019 - 2024. All rights reserved.