带有chaning名称空间的Java DOM XML Parser

时间:2014-12-09 07:48:54

标签: java xml dom xml-namespaces

我对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>

1 个答案:

答案 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元素,即使前缀发生变化。