提问人:jmashalk 提问时间:11/3/2022 更新时间:11/10/2022 访问量:36
是否对用于创建 DominoTree 的 DOM 有任何要求,例如具有命名空间感知能力或使用二级 dom 构建器创建?
Is there any requirement for DOM used to create a DominoTree, such as being namespaceaware or created with level 2 dom builder?
问:
在调用 saxon 库来处理 xquery 表达式之前,我们正在添加代码以将 DOM 转换为 Domino,这涉及构造一个 xml 文档作为输出。 对于使用某些 DOM 构建器创建的 DOM,可以看到以下异常:
java.lang.NullPointerException
at net.sf.saxon.om.NameOfNode.equals(NameOfNode.java:177)
at net.sf.saxon.om.SingletonAttributeMap.put(SingletonAttributeMap.java:69)
at net.sf.saxon.om.NodeInfo.attributes(NodeInfo.java:528)
at net.sf.saxon.tree.util.Navigator.copy(Navigator.java:673)
at net.sf.saxon.om.NodeInfo.copy(NodeInfo.java:568)
at net.sf.saxon.tree.util.Navigator.copy(Navigator.java:679)
at net.sf.saxon.om.NodeInfo.copy(NodeInfo.java:568)
at net.sf.saxon.event.ComplexContentOutputter.decompose(ComplexContentOutputter.java:860)
at net.sf.saxon.event.ComplexContentOutputter.append(ComplexContentOutputter.java:656)
原因似乎是节点属性类型的node.getLocalName()为Domino返回null。如果将 DOM 转换为 Tiny Tree 或使用 DOMWrapper 传递给 Saxon,则相同的设置也有效。
使用 domino 的 Xquery 预期可以工作,但抛出了 Exception。
答:
0赞
Michael Kay
11/10/2022
#1
您在 Saxonica 支持论坛上提出了这个问题 https://saxonica.plan.io/issues/5727
总结一下:
(a) 无论是使用 Saxon 中的 DOM 包装器,还是使用 Domino 结构(添加额外的索引),DOM 都应该是命名空间感知的,并且应该使用命名空间感知(即 2 级)接口来构造。
(b) 如果您不遵守该规则,我们不应该崩溃(因此我们将修复您观察到的崩溃),但我们不能保证提供符合 XPath 的结果。从非命名空间感知DOM到有效XDM实例的映射是未定义且不可预测的,因此XPath处理的结果是未定义的。例如,这可能意味着,当序列化结果时,它不是格式正确的 XML(例如,它可能在元素或属性名称中包含未声明的前缀。
评论