我有大量需要编辑的 HTML(可能还有其他 xml)文档。
编辑通常采用“John Doe”->“[Person A]”的形式。要编辑的文本可能在标题或段落中,但几乎总是在段落中。
真正的简单字符串替换。不是很复杂的事情。
但是,我确实想保留文档结构,并且我不想重新发明任何轮子。文档文本中的字符串替换可能会完成这项工作,但也可能会破坏文档结构,因此它将是最后的选择。
现在我已经盯着 XSLT 看了一个小时,并试图强迫“str:replace”来做我的竞标。我会让您免于查看我无效的微弱尝试,但我会问这个问题:有没有一种简单且已知的方法可以使用 XSLT 应用我的编辑,您可以在这里发布吗?
先感谢您。
更新:应 Martin Honnen 的要求,我正在添加我的输入文件,以及我用来获取最新错误消息的命令。由此可见,当谈到 XSLT 时,我是一个完整的 n00b :-)
.html 文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 过渡//EN">
<html>
<头部>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>今天日期</title>
<meta name="created" content="2020-11-04T30:45:00"/>
</head>
<正文>
<ol 开始=“2”>
<li><p> John Doe 和 Henry 一起在 9. fux 2057
Fluebottom 成立了公司 Doe &; Fluebottom 小部件
公司。</p>
</ol>
</正文>
</html>
XSLT 转换文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:template match="p">
<xsl:copy>
<xsl:attribute name="matchesPattern">
<xsl:copy-of select='str:replace("John Doe", ".*", "[Person A]")'/>
</xsl:attribute>
<xsl:copy-of select='str:replace("Henry Fluebottom", ".*", "[Person B]")'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
命令和输出:
$ xsltproc -html transform.xsl example.html
xmlXPathCompOpEval: function replace bound to undefined prefix str
xmlXPathCompiledEval: 2 objects left on the stack.
<?xml version="1.0"?>
TodaysDate
<p matchesPattern=""/>
$