java - 如何使用 jython 迭代 org.w3c.dom.NodeList?

标签 java dom jython-2.5

我正在使用 org.w3c.dom 来处理一些 xml 文档。我使用 jython 2.5.1 来实现它。

我的 xml 文档 (EmployeeInfo.xml) 的一部分如下:

<employees>
    <employee id="1">
      <name>ABC</name>
      <title>Software Engineer</title>
    </employee> 
    <employee id="2">
      <name>DEF</name>
      <title>Systems Engineer</title>
    </employee>
    <employee id="3">
      <name>GHI</name>
      <title>QA Engineer</title>
    </employee>
    ......
</employees>

我用于读入和解析 xml 的 jython 代码如下:

import sys, logging
logging.basicConfig(level=logging.INFO)

from java.io import File
from javax.xml.parsers import DocumentBuilder
from javax.xml.parsers import DocumentBuilderFactory
from org.w3c.dom import Document
from org.w3c.dom import Element
from org.w3c.dom import Node
from org.w3c.dom import NodeList

// ... some code 

file = "C:/Users/Adminstrator/Doc/EmployeeInfo.xml"
doc = File(file)
if doc.exists():
    docFactory = DocumentBuilderFactory.newInstance()
    docFactory.setNamespaceAware(True)
    docBuilder = docFactory.newDocumentBuilder()

    if doc.endswith(".xml"):
        logging.info(" -- Reading " + doc)
        employeeDoc = docBuilder.parse(doc)

        if employeeDoc != None:
            employees = employeeDoc.getElementsByTagNameNS("*","employee")
            if employees != None:
                for employee in employees:
                    logging.info(employee.getChildNodes().getLength())
            else:
                logging.warn("Failed to get the employee from " + doc)
        else:
            logging.warn("Failed to parse the document " + doc)

else:
    logging.warn("Failed to find the specified document" + doc + ", please check the path!")

当我运行此脚本时,出现错误:

TypeError: 'org.apache.xerces.dom.DeepNodeListImpl' object is not iterable

引用该行:

for employee in employees:

它似乎自动将“员工”视为 jython 的 NodeList 而不是 org.w3c.dom.NodeList...

我在网上搜索了有关此问题的信息,但我对此问题知之甚少...这里有人可以帮助我解决这个问题吗?提前致谢!

最佳答案

我使用while循环来代替for循环,因为很少使用for(int i=0; i

所以我用了:

i = 0
while i < employees.getLength:
    employee = employees.item(i)
    i = i + 1
....

关于java - 如何使用 jython 迭代 org.w3c.dom.NodeList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368472/

相关文章:

java - 未序列化的 Arraylist 始终为空

javascript - 在表单提交时获取对 _blank 目标窗口的引用

javascript - DOM 对象中的继承和原型(prototype)链

java - 为单元测试中的 @Value 字段提供上下文

java - Java或C#中工厂设计模式的反射(reflection)

java - 访问Environment.SpecialFolder

javascript - 如何将 jQuery 函数应用于具有相同 ID 的所有元素?

java - 在 Jython 中设置导入模块路径 - 奇怪的行为

java - 在 Jython 中创建 Java 对象时,类没有可见的构造函数

encoding - Jython 的 Java 和 Python 级别的不同编码