首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从xml文档中删除带有无效标记名的节点

从xml文档中删除带有无效标记名的节点
EN

Stack Overflow用户
提问于 2012-04-25 12:02:58
回答 1查看 561关注 0票数 0

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

示例:

代码语言:javascript
复制
<A>
   <B />
   <C>
      <D />
   </C>
   <E!_RANDOM_ />
   < />
</A>

代码:

代码语言:javascript
复制
import net.sf.saxon.s9api.*;

[...]

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

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

错误:

代码语言:javascript
复制
Error on line X column Y 
SXXP0003: Error reported by XML parser: Element type
"E" must be followed by either attribute specifications, ">" or "/>".

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

使用一些令人难以置信的方法,我可以想出一个正则表达式来识别无效的字符串,但是很难删除包含属性和子节点的节点。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-25 15:19:09

如果输入包含无效标记,那么它不是XML。最好通过将这些文档引用为非XML文档而不是XML文档来确定您的想法;这有助于清楚地表明,要处理非XML文档,您需要非XML工具。(忘记“节点”-在解析文档之前没有节点,在您将其转换为格式良好的XML之前不能对其进行解析)。要将非XML转换为XML,通常需要使用擅长文本操作的非XML工具,如Perl。当然,从源头上解决这个问题要好得多:如果人们以私有的非XML格式生成数据,那么XML的所有好处都会消失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10315195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档