我对WebService进行REST调用,并始终接收XML作为响应。然后我正在解析XML并用这些信息填充Java对象。 问题是元素标签可能有不同的名称空间,如下所示:
<ns:title>....</ns:title>
或
<ns2:title>....<ns2:title>
或
<title>...<title>
编辑: 名称空间URI如下所示:
<ns2:feed xmlns="http://www.example.com/routing1/routing2"
xmlns:ns2="http://www.w3.org/../Atom"
xmlns:ns3="http://www.example.com/routing1/routing2"
xmlns:ns4="http://purl.org/routing1/routing2/1.0">
因此我将方法element.getElementsByTagNameNS("specifiedNamespace", "title")
更改为element.getElementsByTagNameNS("*", "title")
。
可以匹配所有命名空间,因为我还有这样的情况:element-tag没有像第三个例子<title>..</title>
那样的命名空间..
有没有更好的程序来解决这个问题?或者可以解决它,我是怎么做的?
感谢。
编辑:2个响应示例
1
<ns2:feed xmlns="http://www.example.com/routing1/routing2" xmlns:ns2="http://www.w3.org/../Atom" xmlns:ns3="http://www.example.com/routing1/routing2" xmlns:ns4="http://purl.org/routing1/routing2/1.0">
...
<ns2:someTag1>..</ns2:someTag1>
<ns2:title>title</ns2:title>
<entry>...</entry>
....
</ns2:feed>
2
<ns2:feed xmlns="http://www.w3.org/../Atom" xmlns:ns2="http://www.example.com/routing1/routing2" xmlns:ns3="http://www.example.com/routing1/routing2" xmlns:ns4="http://purl.org/routing1/routing2/1.0">
...
<someTag1>..<someTag1>
<title>title<title>
<ns2:entry>...</ns2:entry>
....
</ns2:feed>
答案 0 :(得分:0)
您的title
元素在两个示例中都具有相同的命名空间。
在第一个例子中,你有:
xmlns:ns2="http://www.w3.org/../Atom"
和
<ns2:title>title</ns2:title>
所以这意味着title
位于http://www.w3.org/../Atom
命名空间中。
在第二个例子中,你有:
xmlns="http://www.w3.org/../Atom"
和
<title>title<title>
所以再次title
位于http://www.w3.org/../Atom
命名空间中。
前缀不同(第二个示例不是使用title
的前缀),但命名空间是相同的。
这意味着您应该可以使用:
element.getElementsByTagNameNS("http://www.w3.org/../Atom", "title")
并且它应该成功选择title
元素,即使前缀发生变化。