У меня есть большое количество HTML (и, возможно, других xml) документов, которые мне нужно отредактировать.
Редакции обычно имеют вид "Джон Доу" -> "[Персона A ]». Текст для редактирования может быть в заголовках или абзацах, но почти всегда будет в абзацах.
Простые подстановки строк действительно. Не очень сложные вещи.
Однако я хочу сохранить структуру документа и предпочел бы не изобретать какие-либо колеса. Подстановка строк в тексте документа может сделать работу, но также может нарушить структуру документа, поэтому это будет последний вариант.
Прямо сейчас я часами смотрю на XSLT и пытаюсь заставить "str: replace" исполнять мои ставки. Я избавлю вас от просмотра моих слабых попыток, которые не сработали, но я спрошу: есть ли простой и известный способ применить мои изменения с помощью XSLT, и не могли бы вы опубликовать это здесь?
Спасибо заранее.
Обновление: по просьбе Мартина Хоннена Я добавляю свои входные файлы, а также команду, которую использовал для получения последнего сообщения об ошибке. Из этого будет очевидно, что я полный n00b, когда дело доходит до XSLT: -)
. html file:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>TodaysDate</title>
<meta name="created" content="2020-11-04T30:45:00"/>
</head>
<body>
<ol start="2">
<li><p> John Doe on 9. fux 2057 together with Henry
Fluebottom formed the company Doe &; Fluebottom Widgets
Inc. </p>
</ol>
</body>
</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=""/>
$