我使用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的全部行。
使用一些令人难以置信的方法,我可以想出一个正则表达式来识别无效的字符串,但是很难删除包含属性和子节点的节点。
谢谢你的帮助!
发布于 2012-04-25 15:19:09
如果输入包含无效标记,那么它不是XML。最好通过将这些文档引用为非XML文档而不是XML文档来确定您的想法;这有助于清楚地表明,要处理非XML文档,您需要非XML工具。(忘记“节点”-在解析文档之前没有节点,在您将其转换为格式良好的XML之前不能对其进行解析)。要将非XML转换为XML,通常需要使用擅长文本操作的非XML工具,如Perl。当然,从源头上解决这个问题要好得多:如果人们以私有的非XML格式生成数据,那么XML的所有好处都会消失。
https://stackoverflow.com/questions/10315195
复制相似问题