gpt4 book ai didi

xml - 当根节点有命名空间声明时 GXT 和 AutoBeans 可以处理 XML 吗?

转载 作者:行者123 更新时间:2023-12-04 17:04:39 25 4
gpt4 key购买 nike

我有一条 XML 消息,我正尝试使用 GXT 和 AutoBeans 进行解析。我的 XML 的根节点有一个命名空间声明,似乎 AutoBean 解析器无法读取 XML。

我使用 PropertyName 规范设置 AutoBean 对象图的根:

@PropertyName("record")
RecordObject getRecord();

但是当我的 XML 看起来像这样时:
<record xmlnms:ab="http://anynamespace.com">
<ab:name>SampleName</ab:name>
<ab:email>sample@email.com</ab:email>
</record>

AutoBean 似乎无法解码 XML。如果命名空间声明不存在,AutoBean 可以找到根记录对象。是否有其他参数或我可以指定的内容来告诉 AutoBean 只查看元素名称?

我试过的

我试图解析剥离的命名空间,它可以工作,但在我的实际用例中,我无法删除命名空间声明。我还尝试在 @PropertyName 中指定命名空间属性 - @PropertyName("record xmlnms:ab=\"http://anynamespace.com\"") - 但这不起作用(我也没有想到它会起作用)。

编辑

我正在使用 GXT 的 XmlReader 来尝试解析 XML。

最佳答案

GXT 的 XmlReader 位于浏览器本身存在的 XML 解析器的构建之上。它使用 com.google.gwt.xml.XML GWT 中的模块以获得对所有浏览器的 XML 节点的相对一致的访问,而不是构建自己的 XML 解析器。通过在浏览器中使用内置实现,GXT 可以访问原生解析器——事实证明,浏览器非常擅长解析 XML,因为它们整天都在做加载网页的工作。

然后,GXT 拥有自己的查询引擎,以使用 XPath 和 CSS3 组合的查询语言查找节点。这种混合是为了让它能够很好地在 html 本身中查找节点,以及在 xml 文档中查找节点。这是为了保持一致

然而,浏览器对命名空间的支持不一致(我在看你,IE),所以 GWT 中的 XML 模块不知道如何谈论命名空间,DomQuery 引擎也不知道。此外,:运算符,在 XML 中的意思是“命名空间”,在 CSS 中用来表示“伪选择器”,所以如果直接支持这个查询语言会有点模糊:字符串 foo:bar可以表示“名称为 foo 的所有元素与伪选择器 bar 匹配”,或“ namespace bar 中名称为 foo 的所有元素|”。

问题就够了:解决方案是什么?目前,IE6/IE7/IE8 中的命名空间元素没有一个好的解决方案——一部分浏览器不一致,另一部分 GXT 缺乏丑陋的解决方法,这意味着您无法直接读取元素。对于所有其他浏览器,选择像 namespace:eltname 这样的元素, 只需使用 @PropertyName("eltname") .

另一个注意事项:由于属性没有伪选择器,您可以选择它们 - @PropertyName("namespace:attrname")将正确读出 <element namespace:attrname="value"> 中属性中的值.

关于xml - 当根节点有命名空间声明时 GXT 和 AutoBeans 可以处理 XML 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13418728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com