首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Minidom getElementById不工作

Minidom getElementById不工作
EN

Stack Overflow用户
提问于 2014-07-09 12:39:21
回答 3查看 5.6K关注 0票数 6

Minidom的getElementById函数不返回任何我传递给它的条目。

例如,这段代码:

代码语言:javascript
复制
l = minidom.parseString('<node id="node">Node</node>')
print(l.getElementById("node"))

在我的电脑上打印“无”。

我一定是做错了什么,但我想不出来!

如果这有帮助的话,我正在运行Python3.3.2。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-09 12:51:44

如果您想获得具有name=“节点”的元素

代码语言:javascript
复制
l.getElementsByTagName("node")

如果要获取具有属性"id“和值”节点“的元素,请使用xpath

代码语言:javascript
复制
import xpath
xpath.find("//*['id=node']",l) #search for all elements with an attribute id="node"
票数 1
EN

Stack Overflow用户

发布于 2016-11-07 20:07:55

我使用了另一种方法根据ID (意为XML-属性"id")获取元素,因为我只想使用xml.dom.minidom。

下面是我工作的一个例子:

代码语言:javascript
复制
#import minidom
from xml.dom.minidom import parse as p
#parse your XML-document
cmmn_doc = p("document.xml")
#Get all child nodes of your root-element or any element surrounding your "target" (in my example "cmmn:casePlanModel")
notelist = cmmn_doc.getElementsByTagName("cmmn:casePlanModel")[0].childNodes

#Now find the element via the id-tag
def find_element(id):
    i=0
    for i in range(len(notelist)):
        if notelist[i].getAttribute("id") == id:
        return notelist[i].nodeName #(or whatever you want to do)

#Call find_element with the id you are looking for
find_element(id)

示例中的XML:

代码语言:javascript
复制
    <cmmn:casePlanModel id="CasePlanModel_1" name="A CasePlanModel">
      <cmmn:planItem id="PlanItem_1" definitionRef="Task_1" />
      <cmmn:planItem id="PlanItem_08uai3q" definitionRef="HumanTask_0pgsk2i" />
      <cmmn:planItem id="PlanItem_0crahv8" definitionRef="HumanTask_0jvecsr">
        <cmmn:itemControl id="PlanItemControl_0tdwp8g">
          <cmmn:repetitionRule id="RepetitionRule_03ky93m" />
          <cmmn:requiredRule id="RequiredRule_1klzaio" />
          <cmmn:manualActivationRule id="ManualActivationRule_1rek2bf" />
        </cmmn:itemControl>
      </cmmn:planItem>
      <cmmn:planItem id="PlanItem_08kswcr" definitionRef="HumanTask_14zxi11" />
      <cmmn:planItem id="PlanItem_12b1nkx" definitionRef="ProcessTask_10xuu3g">
        <cmmn:exitCriterion id="EntryCriterion_09gio4l" sentryRef="Sentry_0hst9b5" />
      </cmmn:planItem>
      <cmmn:planItem id="PlanItem_1v34h5m" definitionRef="CaseTask_0hwjce3">
        <cmmn:entryCriterion id="EntryCriterion_1j8r6j1" sentryRef="Sentry_1ii8w5d" />
      </cmmn:planItem>
      <cmmn:planItem id="PlanItem_0wroqsx" definitionRef="EventListener_17yxe7z" />
      <cmmn:sentry id="Sentry_0hst9b5" />
      <cmmn:sentry id="Sentry_1ii8w5d">
        <cmmn:planItemOnPart id="PlanItemOnPart_1gt5jrc" sourceRef="PlanItem_12b1nkx">        <cmmn:standardEvent>complete</cmmn:standardEvent>
</cmmn:planItemOnPart>
        <cmmn:planItemOnPart id="PlanItemOnPart_01b6uw3" sourceRef="PlanItem_0wroqsx">        <cmmn:standardEvent>occur</cmmn:standardEvent>
</cmmn:planItemOnPart>
      </cmmn:sentry>
      <cmmn:task id="Task_1" name="Simple Task" />
      <cmmn:humanTask id="HumanTask_0pgsk2i" name="Human Task" />
      <cmmn:humanTask id="HumanTask_0jvecsr" name="Human_Blocking" isBlocking="false" />
      <cmmn:humanTask id="HumanTask_14zxi11" name="Human_mit_Anhang">
        <cmmn:planningTable id="PlanningTable_1yxv7gm">
          <cmmn:discretionaryItem id="DiscretionaryItem_0ne79yh" definitionRef="DecisionTask_1ecc5v8" />
        </cmmn:planningTable>
      </cmmn:humanTask>
      <cmmn:decisionTask id="DecisionTask_1ecc5v8" name="Descritionary to Human Task" />
      <cmmn:processTask id="ProcessTask_10xuu3g" name="Prozess Task" />
      <cmmn:caseTask id="CaseTask_0hwjce3" name="Case Task" />
      <cmmn:eventListener id="EventListener_17yxe7z" name="EventListener" />
    </cmmn:casePlanModel>

我觉得这样更方便。

票数 2
EN

Stack Overflow用户

发布于 2018-04-22 17:43:26

从您输入的指令中,我了解到您正在尝试获取id值为node的元素。

解决方案是遍历所有XML元素(在这种情况下只有一个,但这并不重要),然后检查该元素是否有一个名为id的属性,并且该属性的值为node

让我们将这一逻辑转化为一个程序:

代码语言:javascript
复制
>>> from xml.dom import minidom
>>> xml_string = '<node id="node">Node</node>'
>>> xml_doc = minidom.parseString(xml_string)
>>> elements = xml_doc.getElementsByTagName('node')
>>> for element in elements:
...     if element.hasAttribute('id') and element.getAttribute('id') == 'node':
...             print(element.toxml())
... 
<node id="node">Node</node>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24653950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档