Вы можете использовать следующую таблицу стилей XSLT для решения вашей проблемы:
ВХОДНЫЕ ФАЙЛЫ:
$ more ?.html
::::::::::::::
1.html
::::::::::::::
<!DOCTYPE html>
<html>
<head>
<title>title reference 1.html</title>
</head>
<body>
The content of the document......
</body>
</html>
::::::::::::::
2.html
::::::::::::::
<!DOCTYPE html>
<html>
<head>
<title>title reference 2.html</title>
</head>
<body>
The content of the document......
</body>
</html>
STYLESHEET:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:redirect="http://xml.apache.org/xalan/redirect" extension-element-prefixes="redirect" xmlns:xalan="http://xml.apache.org/xslt" exclude-result-prefixes="xalan redirect ">
<xsl:output method="html" indent="yes" xalan:indent-amount="4" include-content-type="false" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template name="TitleCase">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text,' ')">
<xsl:call-template name="TitleCaseWord">
<xsl:with-param name="text" select="substring-before($text,' ')"/>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:call-template name="TitleCase">
<xsl:with-param name="text" select="substring-after($text,' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="TitleCaseWord">
<xsl:with-param name="text" select="$text"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="TitleCaseWord">
<xsl:param name="text"/>
<xsl:value-of select="translate(substring($text,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" /><xsl:value-of select="substring($text,2,string-length($text)-1)" />
</xsl:template>
<xsl:template match="//*[local-name()='title']">
<title>
<xsl:call-template name="TitleCase">
<xsl:with-param name="text" select="."/>
</xsl:call-template>
</title>
</xsl:template>
</xsl:stylesheet>
CMD:
$ for i in *.html; do java -classpath "./tagsoup-1.2.jar:./saxon9he.jar" net.sf.saxon.Transform --suppressXsltNamespaceCheck:on -x:org.ccil.cowan.tagsoup.Parser -s:1.html -xsl:title_upper.xsl -o:"new_${i}"; done
Вы можете скачать 2 баночки на
https://mvnrepository.com/artifact/org.ccil.cowan.tagsoup/tagsoup/1.2
и http://saxon.sourceforge.net/
ВЫВОД:
$ more new_*
::::::::::::::
new_1.html
::::::::::::::
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
<head>
<title xmlns="">Title Reference 1.html</title>
</head>
<body>
The content of the document......
</body>
</html>
::::::::::::::
new_2.html
::::::::::::::
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:html="http://www.w3.org/1999/xhtml">
<head>
<title xmlns="">Title Reference 1.html</title>
</head>
<body>
The content of the document......
</body>
</html>
Если у вас есть проблема с saxon
, вы можете просто использовать xsltproc
, поскольку я использую таблицу стилей 1.0
версии:
for i in *.html; do xsltproc --html title_upper.xsl ${i} > "new_${i}"; done