如何用XSLT转换子目录HTML文件去空白?Oxygen权限问题求助
Oxygen Editor批量处理HTML空白去除及权限问题解决
一、批量执行XSLT转换的操作步骤
- 打开Oxygen,顶部菜单栏点Tools > XSLT/XQuery > Transformation Scenarios
- 弹出窗口里点New,选XSLT Transformation
- 配置窗口里按以下设置:
- XML URL:点右侧文件夹图标,选父目录
S9ml,勾选窗口底部的Recurse through subdirectories,文件类型选HTML files (*.html) - XSL URL:选中你写的XSLT样式表文件
- Output:选Save as,指定输出目录(要么选原目录覆盖,要么新建目录存转换后的文件,原目录操作前记得备份)
- 切到Options标签页,勾选Batch processing,开启批量模式
- XML URL:点右侧文件夹图标,选父目录
- 点Save保存这个转换场景,再点Run就开始批量处理所有HTML文件了
二、${cfdu}变量“访问被拒绝”的解决办法
${cfdu}是Oxygen的内置变量,指向当前文件的父目录,出问题大概率是这几个原因:
- 权限不够:Oxygen没权限读写
S9ml目录。Windows右键Oxygen图标选“以管理员身份运行”,Mac/Linux用sudo启动Oxygen试试 - 路径有特殊字符:如果目录路径里有空格、中文或者其他非ASCII字符,容易出问题。把
S9ml移到简单路径下,比如D:/S9ml或者~/S9ml - 文件被占用:检查那些HTML文件有没有被浏览器、其他编辑器打开,被占用的文件写不进去,就会提示访问拒绝
- 变量用错场景:${cfdu}适合单个文件转换时用,批量处理的时候直接选
S9ml目录并开启递归就行,没必要依赖这个变量
补充:优化你的XSLT样式表(真正实现空白去除)
你原来的样式表只是关闭了输出缩进,但没处理HTML里的空白文本节点,等于没真正去掉空白。要彻底去除空白,加上这两个文本节点处理模板:
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="no" /> <!-- 匹配纯空白的文本节点,直接忽略 --> <xsl:template match="text()[normalize-space()='']"/> <!-- 保留非空白文本,同时去掉前后空白 --> <xsl:template match="text()"> <xsl:value-of select="normalize-space()"/> </xsl:template> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*" /> <xsl:apply-templates /> </xsl:copy> </xsl:template> <xsl:template match="comment()|processing-instruction()"> <xsl:copy /> </xsl:template> </xsl:stylesheet>
内容的提问来源于stack exchange,提问作者Anudeep
相关产品推荐
相关产品推荐

