【发布时间】:2012-05-17 22:58:49
【问题描述】:
我通过 Web 服务接收 XML,并且正在使用旧代码(使用 dom4j)来执行一些 xml 转换。将原始 XML 加载/解析为 VTD-XML (VTDGen) 工作正常,没有抛出异常。但是,在将 xml 加载到 dom4j 后,我注意到一些元素名称空间声明和属性被重新排列。显然,这种重新安排会导致 VTD-XML 抛出以下异常:
例外: 命名空间限定异常:前缀属性不限定
行号:101 偏移量:1827
这是原始 XML 中此行号处的元素:
这是加载到 dom4j 后的相同元素:
问题在于新 XML 元素中的属性(偏移 1827 处,元素末尾):RR_PerformanceSite:FormVersion="1.4"
以下是消除异常的原因: 1. 将此元素的 RR_PerformanceSite xmlns 声明添加到 XML 文档的根元素。 2.用原来的元素替换新元素。这似乎让我相信属性/ns 声明的顺序会在解析时影响 VTD。
注意:我使用两个 xml 文档(原始和后 dom4j xml)将 ns 感知的 xml 文档设置解析为“真”。此外,还会为每个 xml、original 和 post-dom4j 创建新的 VTD 对象。
我尝试像原始元素一样将 'RR_PerformanceSite:FormVersion="1.4"' 放在元素的开头,但这并没有消除异常。由于属性位置的变化,错误消息中的偏移量不同。 xmlns声明的顺序会影响VTD吗?
我查看了 VTDGen 源代码,但无法弄清楚为什么会引发此异常。
为什么 dom4j 会解析新文档而 vtd 却无法解析?任何人都可以对此有所了解吗?
【问题讨论】:
-
这个问题可能已经在 2.11 中修复了
标签: vtd-xml