0

我使用 Saxon XSLT2 处理器(使用 Java + Saxon S9API)转换 xml,并且必须处理 xml 文档作为源,其中包含无效字符作为标记名称,因此无法由文档生成器解析。

例子:

<A>
   <B />
   <C>
      <D />
   </C>
   <E!_RANDOM_ />
   < />
</A>

代码:

import net.sf.saxon.s9api.*;

[...]

/* XSLT Processor & Compiler */
proc = new Processor(false);

/* build document from input*/
XdmNode source = proc.newDocumentBuilder().build(new StreamSource(input));

错误:

Error on line X column Y 
SXXP0003: Error reported by XML parser: Element type
"E" must be followed by either attribute specifications, ">" or "/>".

感叹号和只是空格的标签名称是我目前唯一的无效标签。我正在寻找更强大的解决方案,而不仅仅是删除(格式化)xml 的整行。

经过一番折腾,我可以想出一个正则表达式来识别无效字符串,但会在删除包含属性和子节点的节点时遇到困难。

谢谢您的帮助!

4

1 回答 1

2

如果输入包含无效标签,则它不是 XML。最好通过将这些称为非 XML 文档而不是 XML 文档来确立您的思维定势;这有助于明确处理非 XML 文档,您需要非 XML 工具。(忘记“节点” - 在文档被解析之前没有节点,并且在将其转换为格式良好的 XML 之前无法解析)。要将非 XML 转换为 XML,通常需要使用擅长文本操作的非 XML 工具,例如 Perl。当然,从源头解决问题要好得多:如果人们以私有的非 XML 格式生成数据,那么 XML 的所有好处都将丧失。

于 2012-04-25T15:19:09.147 回答