使用 NameSpace 解析 XML

标签 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");

谁能告诉如何实现这一目标?

最佳答案

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

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

更新

请注意,您的根元素是 response (在全局命名空间中),所以你要么需要明确地导航它,要么使用 //寻找匹配的后代。

关于使用 NameSpace 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361824/

相关文章:

sql-server - 如何解析 SQL Server 2012 中的 XML 列?

C# 单元测试解析器

javascript - 如何将变量传递给 Javascript 命名空间

c++ - 如何减轻文件中远离其所有者命名空间声明的类声明?

java - Android 菜单换行符

java - 无法使用 Java 编辑 XSL 属性值

android - Cocos2d-x 使用 pugixml 从 URL 的内容解析 XML,我该怎么做?

javascript - 如何使用 JavaScript 中的正则表达式查找 HTML 邮件中的 HTTP 链接

json - Json中空格的定义

php:如何在这个结构中实现命名空间