使用 XSL 在 XML 个文件中打印编码属性
Printing the encoding attribute in XML files with XSL
我有一长串 xml 文件,它们可能具有不同的编码。我想浏览所有文件并打印它们的编码。在 XML header 中打印编码属性只是第一步。 (下一步,一旦我发现如何访问编码属性,将使用编码属性来测试这是否是预期的编码。)
这是输入 xml 文件的样子:
<?xml version="1.0" encoding="iso-8859-1"?>
<Resource Name="text1" Language="de">
<Text>
</Text>
</Resource>
<?xml version="1.0" encoding="utf-8"?>
<Resource Name="file2" Language="ko">
<Text>
</Text>
</Resource>
xsl,已经减到最少了,还是没有成功。我想我无法通过这种方式来匹配 XML header 。但是我怎样才能匹配 XML header 中的内容?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="@encoding"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在您使用支持 XML 的处理器阅读 XML 后,XML 序言的编码伪属性不再相关。除非序言中的编码与使用的编码不匹配 and 文件包含无法用该编码表示的字符。
据我所知,使用 XSLT 获取编码的唯一方法是使用函数 unparsed-text
(XSLT 2.0) 或 unparsed-text-lines
(XSLT 3.0),然后使用正则表达式 (replace
或 xsl:analyze-string
,均为 XSLT 2.0) 以手动解析序言。
由于 XSLT(以及大多数 XML 支持的工具和处理器)将 XML 视为不是文本文件而是一组具有字符流而不是字节流的节点,因此需要读取几乎不需要编码。
如果您想知道 document
、doc
或 unparsed-text
等函数的编码,这些函数的定义是它们将从序言中读取编码并使用它.在 XSLT 3.0 中,您可以使用 try/catch
来确定它是否成功解析了一个文件。在 XSLT 2.0 中,您有 doc-available
,如果编码与使用的字节不匹配,它将 return false。
我有一长串 xml 文件,它们可能具有不同的编码。我想浏览所有文件并打印它们的编码。在 XML header 中打印编码属性只是第一步。 (下一步,一旦我发现如何访问编码属性,将使用编码属性来测试这是否是预期的编码。)
这是输入 xml 文件的样子:
<?xml version="1.0" encoding="iso-8859-1"?>
<Resource Name="text1" Language="de">
<Text>
</Text>
</Resource>
<?xml version="1.0" encoding="utf-8"?>
<Resource Name="file2" Language="ko">
<Text>
</Text>
</Resource>
xsl,已经减到最少了,还是没有成功。我想我无法通过这种方式来匹配 XML header 。但是我怎样才能匹配 XML header 中的内容?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="@encoding"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在您使用支持 XML 的处理器阅读 XML 后,XML 序言的编码伪属性不再相关。除非序言中的编码与使用的编码不匹配 and 文件包含无法用该编码表示的字符。
据我所知,使用 XSLT 获取编码的唯一方法是使用函数 unparsed-text
(XSLT 2.0) 或 unparsed-text-lines
(XSLT 3.0),然后使用正则表达式 (replace
或 xsl:analyze-string
,均为 XSLT 2.0) 以手动解析序言。
由于 XSLT(以及大多数 XML 支持的工具和处理器)将 XML 视为不是文本文件而是一组具有字符流而不是字节流的节点,因此需要读取几乎不需要编码。
如果您想知道 document
、doc
或 unparsed-text
等函数的编码,这些函数的定义是它们将从序言中读取编码并使用它.在 XSLT 3.0 中,您可以使用 try/catch
来确定它是否成功解析了一个文件。在 XSLT 2.0 中,您有 doc-available
,如果编码与使用的字节不匹配,它将 return false。