我在XSL函数方面没有很多经验。
我有各种各样的现有文件,并将不断有一堆新文件,这些文件是各种"风味"的XML。NITF等。
我想做的是处理所有的XML文件,用新的元素名称替换某些元素,并重新保存它们。
使用Oxygen作为应用程序。这些文件最终将被DAM吸收。
。在XML文件中,下面的代码:
<abstract>
<hl2>Mercy for Animals doesn’t work on tips. Its investigators go where they get hired, with cameras.</hl2>
</abstract>
我想让这个代码:
<title>
<hl2>Mercy for Animals doesn’t work on tips. Its investigators go where they get hired, with cameras.</hl2>
</title>
所以一个简单的搜索和替换,XML文件,然后重新保存出来,保存文件名等,并保持结构等。
代码可以添加不同的变换吗?
基本原因是将来自不同来源的各种XML文件摄取为我们的DAM需要的XML格式。也许是XSL-FO?
当您遇到的XSLT问题相当于"保持大部分内容不变,但调整X、Y和Z"时,标准的答案是使用"恒等转换"。这是一个单独的模板,它将不加更改地将输入文档复制到输出,但是可以被其他更具体的模板选择性地覆盖以进行修改。最基本的意思是
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- identity template - copy everything verbatim except for ... -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- ... abstract elements, which we rename to title -->
<xsl:template match="abstract">
<title>
<xsl:apply-templates select="@*|node()" />
</title>
</xsl:template>
</xsl:stylesheet>
但是如果您的输入文档涉及任何名称空间,那么您需要适当地调整您的匹配表达式。例如,如果输入文档有xmlns="http://example.com"
,那么文档中的所有无前缀元素都属于该名称空间,为了在XSLT中匹配它们,您需要创建一个前缀绑定并在match
中使用它:
<xsl:stylesheet ....
xmlns:ex="http://example.com">
<xsl:template match="ex:abstract">
作为匹配模式和XPath表达式中的无前缀名称总是表示没有命名空间中的节点。