使用NameSpace进行XML解析

时间:2013-01-16 15:24:36

标签: xml parsing namespaces

我有以下xml

<?xml version="1.0"?>
<response status="200">
  <ns3:output xmlns="http://xmlns.oracle.com/apps/fnd/wf/worklist/service/rt/artifacts/notificationdetails/" 
              xmlns:ns2="http://xmlns.oracle.com/apps/fnd/wf/worklist/service/rt/artifacts/worklistmgmt/" 
              xmlns:ns3="http://xmlns.oracle.com/apps/fnd/wf/worklist/service/rt/artifacts/worklist/">
    <ns2:notifications count="140552">
      <ns2:notification>
        <ns2:NotificationId>4687807</ns2:NotificationId>
      </ns2:notification>
    </ns2:notifications>
  </ns3:output>
</response>

我需要解析它并获取每行的NotificationId值。 我尝试使用以下代码获取列表,但它返回0。

notificationrows = xmlDoc.documentElement.selectNodes("/ns3:output/ns2:notifications");

任何人都可以告诉如何实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

根据评论,您没有告诉我们您正在使用哪种语言/解析器,但您可以使用local-name()来实现命名空间无关的xpath,以避免使用NamespaceManager或类似的,如下所示:

notificationrows = xmlDoc.documentElement.selectNodes("/response/*[local-name()='output']/*[local-name()='notifications']");

更新

请注意,您的根元素是response(在全局命名空间中),因此您需要显式导航它,或使用//查找匹配的后代。