Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当根节点具有名称空间声明时,GXT和AutoBeans是否可以处理XML?_Xml_Parsing_Namespaces_Gxt_Autobean - Fatal编程技术网

当根节点具有名称空间声明时,GXT和AutoBeans是否可以处理XML?

当根节点具有名称空间声明时,GXT和AutoBeans是否可以处理XML?,xml,parsing,namespaces,gxt,autobean,Xml,Parsing,Namespaces,Gxt,Autobean,我试图使用GXT和AutoBeans解析一条XML消息。我的XML的根节点有一个名称空间声明,并且AutoBean解析器似乎无法读取XML 我使用PropertyName规范设置AutoBean对象图的根: @PropertyName("record") RecordObject getRecord(); 但当我的XML看起来像这样时: <record xmlnms:ab="http://anynamespace.com"> <ab:name>SampleName<

我试图使用GXT和AutoBeans解析一条XML消息。我的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>

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

我尝试过的

我尝试剥离名称空间进行解析,但在我的实际用例中,我无法删除名称空间声明。我还尝试在
@PropertyName
属性-
@PropertyName(“record xmlnms:ab=\”中指定名称空间http://anynamespace.com\“”)
-但这不起作用(我也没料到)

编辑


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

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

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

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

问题到此为止:解决方案是什么?目前,IE6/IE7/IE8中没有一个好的名称空间元素-浏览器中有一部分不一致,GXT中有一部分缺少难看的解决方法,这意味着您无法直接读取元素。对于所有其他浏览器,要选择像
名称空间:eltname
这样的元素,只需使用
@PropertyName(“eltname”)


另一个注意事项:由于属性没有psuedo选择器,因此可以选择它们-
@PropertyName(“名称空间:attrname”)
将正确读取

中属性中的值。您首先是如何将xml解析为AutoBeans的?上次我查看时,GWT只支持JSONAutoBeans。GXT有一个XmlReader,它使用自定义拆分表实现来处理xml?这就是您正在使用的吗?或者有其他方法来连接它吗?是的我的意思是GXT。我正在尝试使用XmlReader。编辑文章…很棒-尝试回答传入…谢谢-我认为这是大部分答案,但XmlReader无法具体读取根节点。因此,如果根包含名称空间的声明,XmlReader无法解析XML a并非所有。根据您的回答,我认为这可能是由于GXT查询引擎实现的缘故?我不是试图获取名称空间声明中的值,而是解析整个XML消息。似乎XmlReader不认为有有效的XML要解析,除非根节点只是一个元素(例如…)。问题的根源在于IE没有GetElementsByTagnames函数,再加上
运算符在DomQuery语法中已经有了意义,这与将其用于名称空间不兼容。读取具有名称空间的元素(类似于未使用的属性)没有问题,但读取
ab:email
/
ab:name
IE中的子标记。如果DomQuery不支持psuedo选择器(
:first
:偶数
:not(…)
,等等),它可以匹配名称空间。其他选择,如我在论坛帖子中所述,强制xml解析看起来更像CSS,或者执行新的查询。