代码之家  ›  专栏  ›  技术社区  ›  mshafrir

使用Saxon转换时处理XML中的特殊字符

  •  0
  • mshafrir  · 技术社区  · 16 年前

    我正在尝试使用Saxon将样式表应用于XML文档。给定一个用Microsoft Word生成的XML文件,并且该文件有Microsoft Word样式的引号,如下面文档中的about foo

    <?xml version="1.0" encoding="UTF-8"?>
    <doc>
        <act>
            <performer typeCode=“FOO“ />
            <performer typeCode="BAR" />
        </act>
    </doc>
    

    Saxon引发以下错误:

    SXXP0003: Error reported by XML parser: Invalid byte 1 of 1-byte UTF-8 sequence.
    

    在XML中处理这些类型的“特殊”字符的最佳方法是什么?这些字符原本是有效的,但却在实际的解析/转换中中断了?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Kathy Van Stone    16 年前

    由于上面的XML无效,因此必须对输入进行一些预处理(例如 FilterReader ,就像任何XML解析器都会指示一个错误(通常是一个致命错误,因此您无法处理该错误并继续)。

    如果特殊引号只在XML中,则可以用普通引号简单地替换特殊引号(如果必须检查编码类型的前导码,则需要做更多的工作)。如果您希望在文档中的其他地方保留特殊引号,则必须执行一些更复杂的操作(主要是跟踪您是否在标记中)。

        2
  •  1
  •   Gareth Davis    16 年前

    问题是那些“特殊”引号不是有效的XML。Saxon或其他任何XML解析器都将丢弃这些东西,而不是解析文档。

    我唯一能建议的就是搜索并替换这些内容,然后用期望的引号替换它们。