PySide6.QtXml.QDomNode

class QDomNode

QDomNode 类是 DOM 树中所有节点的基类。更多

继承者: QDomProcessingInstruction, QDomNotation, QDomEntityReference, QDomEntity, QDomElement, QDomDocumentType, QDomDocumentFragment, QDomDocument, QDomCharacterData, QDomText, QDomComment, QDomCDATASection, QDomAttr

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

DOM中的许多函数返回一个QDomNode

你可以使用isAttr()isCDATASection()isDocumentFragment()isDocument()isDocumentType()isElement()isEntityReference()isText()isEntity()isNotation()isProcessingInstruction()isCharacterData()isComment()来查找节点的类型。

一个QDomNode可以使用toAttr()toCDATASection()toDocumentFragment()toDocument()toDocumentType()toElement()toEntityReference()toText()toEntity()toNotation()toProcessingInstruction()toCharacterData()toComment()转换为它的一个子类。你可以使用clear()将一个节点转换为空节点。

QDomNode 类的副本使用显式共享来共享它们的数据。这意味着修改一个节点将改变所有副本。这在结合返回 QDomNode 的函数时特别有用,例如 firstChild()。您可以使用 cloneNode() 创建节点的独立(深)副本。

一个 QDomNode 可以为空,就像 None 一样。创建一个空节点的副本会生成另一个空节点。无法修改空节点,但可以为其分配另一个可能非空的节点。在这种情况下,空节点的副本将保持为空。您可以通过调用 isNull() 来检查 QDomNode 是否为空。QDomNode(或其任何派生类)的空构造函数会创建一个空节点。

节点通过insertBefore()insertAfter()appendChild()插入。你可以使用replaceChild()替换一个节点,并使用removeChild()删除一个节点。

要遍历节点,使用firstChild()获取节点的第一个子节点(如果有的话),并使用nextSibling()进行遍历。QDomNode还提供了lastChild()previousSibling()parentNode()。要查找具有特定节点名称的第一个子节点,请使用namedItem()

要查找一个节点是否有子节点,请使用hasChildNodes(),要获取一个节点的所有子节点列表,请使用childNodes()

节点的名称和值(其含义根据类型而异)分别由nodeName()nodeValue()返回。节点的类型由nodeType()返回。节点的值可以通过setNodeValue()设置。

节点所属的文档由ownerDocument()返回。

相邻的QDomText节点可以通过normalize()合并为单个节点。

QDomElement 节点具有可以通过 attributes() 检索的属性。

QDomElementQDomAttr 节点可以具有命名空间,这些命名空间可以通过 namespaceURI() 获取。它们的本地名称可以通过 localName() 获取,前缀可以通过 prefix() 获取。前缀可以通过 setPrefix() 设置。

你可以使用save()将节点的XML表示写入文本流。

以下示例查找XML文档中的第一个元素,并打印其所有直接子元素的名称。

d = QDomDocument()
someXML = QString()
d.setContent(someXML)
n = d.firstChild()
while not n.isNull():
    if n.isElement():
        e = n.toElement()
        print("Element name: ", qPrintable(e.tagName()), '\n')
        break

    n = n.nextSibling()

有关文档对象模型的更多信息,请参阅Level 1Level 2 Core。有关DOM实现的更一般介绍,请参阅QDomDocument文档。

class NodeType

此枚举定义了节点的类型:

常量

描述

QDomNode.ElementNode

QDomNode.AttributeNode

QDomNode.TextNode

QDomNode.CDATASectionNode

QDomNode.EntityReferenceNode

QDomNode.EntityNode

QDomNode.ProcessingInstructionNode

QDomNode.CommentNode

QDomNode.DocumentNode

QDomNode.DocumentTypeNode

QDomNode.DocumentFragmentNode

QDomNode.NotationNode

QDomNode.BaseNode

一个 QDomNode 对象,即不是 QDomNode 的子类。

QDomNode.CharacterDataNode

class EncodingPolicy

此枚举指定了save()在序列化时如何确定使用哪种编码。

常量

描述

QDomNode.EncodingFromDocument

编码是从文档中获取的。

QDomNode.EncodingFromTextStream

编码是从QTextStream中获取的。

另请参阅

save()

__init__()

构造一个null节点。

__init__(node)
Parameters:

节点QDomNode

构造node的副本。

复制的数据是共享的(浅拷贝):修改一个节点也会改变另一个。如果你想进行深拷贝,请使用cloneNode()

appendChild(newChild)
Parameters:

newChildQDomNode

Return type:

QDomNode

newChild 作为节点的最后一个子节点追加。

如果 newChild 是另一个节点的子节点,它将被重新分配到该节点。如果 newChild 是该节点的子节点,则其在子节点列表中的位置将被更改。

如果 newChild 是一个 QDomDocumentFragment,那么片段中的子节点将从片段中移除并附加。

如果 newChild 是一个 QDomElement 并且此节点是一个 QDomDocument,且已经有一个元素节点作为子节点,则 newChild 不会被添加为子节点,并且会返回一个空节点。

成功时返回对newChild的新引用,失败时返回null node

在空节点上调用此函数(例如,使用默认构造函数创建的)不会执行任何操作,并返回一个null node

DOM规范不允许插入属性节点,但由于历史原因,QDom仍然接受它们。

attributes()
Return type:

QDomNamedNodeMap

返回所有属性的命名节点映射。属性仅适用于QDomElement

更改地图中的属性也会更改此 QDomNode 的属性。

childNodes()
Return type:

QDomNodeList

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回所有直接子节点的列表。

大多数情况下,您将在QDomElement对象上调用此函数。

例如,如果XML文档看起来像这样:

<body>
<h1>Heading</h1>
<p>Hello <b>you</b></p>
</body>

然后,“body”元素的子节点列表将包含由

标签创建的节点和由

标签创建的节点。

列表中的节点不会被复制;因此,更改列表中的节点也会更改此节点的子节点。

另请参阅

firstChild() lastChild()

clear()

将节点转换为空节点;如果之前不是空节点,则删除其类型和内容。

另请参阅

isNull()

cloneNode([deep=true])
Parameters:

deep – bool

Return type:

QDomNode

创建 QDomNode 的深拷贝(非浅拷贝)。

如果 deep 为 true,则克隆是递归进行的,这意味着所有节点的子节点也会被深拷贝。如果 deep 为 false,则只复制节点本身,副本将没有子节点。

columnNumber()
Return type:

整数

对于由setContent()创建的节点,此函数返回节点在XML文档中被解析时的列号。否则,返回-1。

另请参阅

lineNumber() setContent()

firstChild()
Return type:

QDomNode

返回节点的第一个子节点。如果没有子节点,则返回一个null node。更改返回的节点也会更改文档树中的节点。

另请参阅

lastChild() childNodes()

firstChildElement([tagName=""[, namespaceURI=""]])
Parameters:
  • tagName – str

  • namespaceURI – str

Return type:

QDomElement

返回具有标签名称tagName和命名空间URInamespaceURI的第一个子元素。如果tagName为空,则返回具有namespaceURI的第一个子元素;如果namespaceURI为空,则返回具有tagName的第一个子元素。如果两个参数都为空,则返回第一个子元素。如果不存在这样的子元素,则返回一个空元素。

hasAttributes()
Return type:

布尔

如果节点有属性,则返回 true;否则返回 false

另请参阅

attributes()

hasChildNodes()
Return type:

布尔

如果节点有一个或多个子节点,则返回true;否则返回false

insertAfter(newChild, refChild)
Parameters:
Return type:

QDomNode

在子节点 refChild 之后插入节点 newChildrefChild 必须是此节点的直接子节点。如果 refChildnull,则 newChild 将作为此节点的最后一个子节点追加。

如果 newChild 是另一个节点的子节点,它将被重新分配到该节点。如果 newChild 是该节点的子节点,则其在子节点列表中的位置将被更改。

如果 newChild 是一个 QDomDocumentFragment,那么片段中的子节点将从片段中移除并插入到 refChild 之后。

成功时返回对newChild的新引用,失败时返回null node

DOM规范不允许插入属性节点,但由于历史原因,QDom仍然接受它们。

insertBefore(newChild, refChild)
Parameters:
Return type:

QDomNode

在子节点 refChild 之前插入节点 newChildrefChild 必须是此节点的直接子节点。如果 refChildnull,则 newChild 将作为节点的第一个子节点插入。

如果 newChild 是另一个节点的子节点,它将被重新分配到该节点。如果 newChild 是该节点的子节点,则其在子节点列表中的位置将被更改。

如果 newChild 是一个 QDomDocumentFragment,那么片段中的子节点将从片段中移除并插入到 refChild 之前。

成功时返回对newChild的新引用,失败时返回null node

DOM规范不允许插入属性节点,但由于历史原因,QDom仍然接受它们。

isAttr()
Return type:

布尔

如果节点是属性,则返回 true;否则返回 false

如果此函数返回 true,并不意味着此对象是 QDomAttribute;你可以使用 toAttribute() 获取 QDomAttribute。

另请参阅

toAttr()

isCDATASection()
Return type:

布尔

如果节点是CDATA部分,则返回true;否则返回false。

如果此函数返回 true,并不意味着此对象是 QDomCDATASection;你可以通过 toCDATASection() 获取 QDomCDATASection

另请参阅

toCDATASection()

isCharacterData()
Return type:

布尔

如果节点是字符数据节点,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomCharacterData;你可以通过 toCharacterData() 获取 QDomCharacterData

另请参阅

toCharacterData()

isComment()
Return type:

布尔

如果节点是注释,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomComment;你可以通过 toComment() 获取 QDomComment

另请参阅

toComment()

isDocument()
Return type:

布尔

如果节点是文档,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomDocument;你可以通过 toDocument() 获取 QDomDocument

另请参阅

toDocument()

isDocumentFragment()
Return type:

布尔

如果节点是文档片段,则返回true;否则返回false。

如果此函数返回true,并不意味着此对象是QDomDocumentFragment;你可以通过toDocumentFragment()获取QDomDocumentFragment

另请参阅

toDocumentFragment()

isDocumentType()
Return type:

布尔

如果节点是文档类型,则返回true;否则返回false。

如果此函数返回true,并不意味着此对象是QDomDocumentType;你可以通过toDocumentType()获取QDomDocumentType

另请参阅

toDocumentType()

isElement()
Return type:

布尔

如果节点是一个元素,则返回 true;否则返回 false

如果此函数返回 true,并不意味着此对象是 QDomElement;你可以使用 toElement() 获取 QDomElement

另请参阅

toElement()

isEntity()
Return type:

布尔

如果节点是一个实体,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomEntity;你可以通过 toEntity() 获取 QDomEntity

另请参阅

toEntity()

isEntityReference()
Return type:

布尔

如果节点是实体引用,则返回true;否则返回false。

如果此函数返回true,并不意味着此对象是QDomEntityReference;你可以通过toEntityReference()获取QDomEntityReference

另请参阅

toEntityReference()

isNotation()
Return type:

布尔

如果节点是一个符号,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomNotation;你可以通过 toNotation() 获取 QDomNotation

另请参阅

toNotation()

isNull()
Return type:

布尔

如果此节点为空(即没有类型或内容),则返回true;否则返回false

isProcessingInstruction()
Return type:

布尔

如果节点是处理指令,则返回true;否则返回false

如果此函数返回 true,并不意味着此对象是 QDomProcessingInstruction;你可以使用 toProcessingInstruction() 获取 QProcessingInstruction。

isSupported(feature, version)
Parameters:
  • feature – str

  • version – str

Return type:

布尔

如果DOM实现实现了特性feature并且该节点在版本version中支持此特性,则返回true;否则返回false

另请参阅

hasFeature()

isText()
Return type:

布尔

如果节点是文本节点,则返回true;否则返回false

如果此函数返回true,并不意味着此对象是QDomText;你可以通过toText()获取QDomText

另请参阅

toText()

lastChild()
Return type:

QDomNode

返回节点的最后一个子节点。如果没有子节点,则返回一个null node。更改返回的节点也会更改文档树中的节点。

另请参阅

firstChild() childNodes()

lastChildElement([tagName=""[, namespaceURI=""]])
Parameters:
  • tagName – str

  • namespaceURI – str

Return type:

QDomElement

返回具有标签名称tagName和命名空间URInamespaceURI的最后一个子元素。如果tagName为空,则返回具有namespaceURI的最后一个子元素;如果namespaceURI为空,则返回具有tagName的最后一个子元素。如果两个参数都为空,则返回最后一个子元素。如果不存在这样的子元素,则返回一个空元素。

lineNumber()
Return type:

整数

对于由setContent()创建的节点,此函数返回节点在XML文档中被解析的行号。否则,返回-1。

localName()
Return type:

字符串

如果节点使用命名空间,此函数返回节点的本地名称;否则返回一个空字符串。

只有类型为ElementNodeAttributeNode的节点才能拥有命名空间。命名空间必须在创建时指定;之后无法添加命名空间。

namedItem(name)
Parameters:

name – str

Return type:

QDomNode

返回第一个直接子节点,其中nodeName()等于name

如果不存在这样的直接子节点,则返回一个null node

另请参阅

nodeName()

namespaceURI()
Return type:

字符串

返回此节点的命名空间URI,如果节点没有命名空间URI,则返回空字符串。

只有类型为ElementNodeAttributeNode的节点才能拥有命名空间。命名空间URI必须在创建时指定,之后不能更改。

nextSibling()
Return type:

QDomNode

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回文档树中的下一个兄弟节点。更改返回的节点也会更改文档树中的节点。

如果你有这样的XML:

<h1>Heading</h1>
<p>The text...</p>
<h2>Next heading</h2>

而这个 QDomNode 表示

标签,nextSibling() 将返回表示

标签的节点。

另请参阅

previousSibling()

nextSiblingElement([taName=""[, namespaceURI=""]])
Parameters:
  • taName – str

  • namespaceURI – str

Return type:

QDomElement

返回具有标签名称tagName和命名空间URInamespaceURI的下一个兄弟元素。如果tagName为空,则返回具有namespaceURI的下一个兄弟元素;如果namespaceURI为空,则返回具有tagName的下一个兄弟子元素。如果两个参数都为空,则返回下一个兄弟元素。如果不存在这样的兄弟元素,则返回一个空元素。

nodeName()
Return type:

字符串

返回节点的名称。

名称的含义取决于子类:

名称

含义

QDomAttr

属性的名称

QDomCDATASection

字符串“#cdata-section”

QDomComment

字符串“#comment”

QDomDocument

字符串“#document”

QDomDocumentFragment

字符串“#document-fragment”

QDomDocumentType

文档类型的名称

QDomElement

标签名称

QDomEntity

实体的名称

QDomEntityReference

被引用实体的名称

QDomNotation

符号的名称

QDomProcessingInstruction

处理指令的目标

QDomText

字符串“#text”

注意

此函数在处理元素和属性节点的名称时,不考虑命名空间的存在。因此,返回的名称可能包含任何可能存在的命名空间前缀。要获取元素或属性的节点名称,请使用 localName();要获取命名空间前缀,请使用 namespaceURI()

另请参阅

nodeValue()

nodeType()
Return type:

NodeType

返回节点的类型。

nodeValue()
Return type:

字符串

返回节点的值。

值的含义取决于子类:

名称

含义

QDomAttr

属性值

QDomCDATASection

CDATA 部分的内容

QDomComment

注释

QDomProcessingInstruction

处理指令的数据

QDomText

文本

所有其他子类没有节点值,将返回一个空字符串。

另请参阅

setNodeValue() nodeName()

normalize()

在元素上调用normalize()会将其所有子元素转换为标准形式。这意味着相邻的QDomText对象将合并为单个文本对象(QDomCDATASection节点不会被合并)。

__ne__(other)
Parameters:

其他QDomNode

Return type:

布尔

如果 other 和这个 DOM 节点不相等,则返回 true;否则返回 false

__eq__(other)
Parameters:

其他QDomNode

Return type:

布尔

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

如果 other 和这个 DOM 节点相等,则返回 true;否则返回 false

QDomNode 的任何实例都充当对 QDomDocument 中底层数据结构的引用。相等性测试检查两个引用是否指向相同的底层节点。例如:

document = QDomDocument()
element1 = document.documentElement()
element2 = element1

这两个节点(QDomElementQDomNode 的子类)都指向文档的根元素,并且 element1 == element2 将返回 true。另一方面:

element3 = document.createElement("MyElement")
element4 = document.createElement("MyElement")

尽管两个节点都是具有相同名称的空元素,element3 == element4 将返回 false,因为它们引用的是底层数据结构中的两个不同节点。

ownerDocument()
Return type:

QDomDocument

返回此节点所属的文档。

parentNode()
Return type:

QDomNode

返回父节点。如果此节点没有父节点,则返回一个空节点(即一个节点,对于该节点,isNull() 返回 true)。

prefix()
Return type:

字符串

返回节点的命名空间前缀,如果节点没有命名空间前缀,则返回空字符串。

只有类型为ElementNodeAttributeNode的节点才能拥有命名空间。命名空间前缀必须在创建时指定。如果节点在创建时带有命名空间前缀,您稍后可以使用setPrefix()来更改它。

如果你使用createElement()createAttribute()创建元素或属性,前缀将是一个空字符串。如果你使用createElementNS()createAttributeNS(),前缀将不会是一个空字符串;但如果名称没有前缀,它可能仍然是一个空字符串。

previousSibling()
Return type:

QDomNode

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

返回文档树中的前一个兄弟节点。更改返回的节点也会更改文档树中的节点。

例如,如果你有这样的XML:

<h1>Heading</h1>
<p>The text...</p>
<h2>Next heading</h2>

并且这个 QDomNode 表示 <p> 标签,previousSibling() 将返回表示 <h1> 标签的节点。

另请参阅

nextSibling()

previousSiblingElement([tagName=""[, namespaceURI=""]])
Parameters:
  • tagName – str

  • namespaceURI – str

Return type:

QDomElement

返回具有标签名称tagName和命名空间URInamespaceURI的前一个兄弟元素。如果tagName为空,则返回具有namespaceURI的前一个兄弟元素;如果namespaceURI为空,则返回具有tagName的前一个兄弟元素。如果两个参数都为空,则返回前一个兄弟元素。如果不存在这样的兄弟元素,则返回一个空元素。

removeChild(oldChild)
Parameters:

oldChildQDomNode

Return type:

QDomNode

从子节点列表中移除oldChildoldChild必须是该节点的直接子节点。

成功时返回对oldChild的新引用,失败时返回null node

replaceChild(newChild, oldChild)
Parameters:
Return type:

QDomNode

newChild替换oldChildoldChild必须是此节点的直接子节点。

如果 newChild 是另一个节点的子节点,它将被重新分配到该节点。如果 newChild 是该节点的子节点,则其在子节点列表中的位置将被更改。

如果 newChild 是一个 QDomDocumentFragment,那么 oldChild 将被片段的所有子节点替换。

成功时返回对 oldChild 的新引用,失败时返回 null node

save(stream, indent[, encodingPolicy=QDomNode.EncodingFromDocument])
Parameters:

将节点及其所有子节点的XML表示写入流stream。此函数使用indent作为节点的缩进量。

如果文档包含无效的XML字符或无法在给定编码中编码的字符,结果和行为是未定义的。

如果 encodingPolicyEncodingFromDocument 并且此节点是文档节点,则通过将名为“xml”的处理指令视为XML声明来设置文本流 stream 的编码,如果存在这样的处理指令,否则默认为UTF-8。XML声明不是处理指令,但此行为由于历史原因而存在。如果此节点不是文档节点,则使用文本流的编码。

如果 encodingPolicyEncodingFromTextStream 并且此节点是文档节点,则此函数的行为类似于 save(QTextStream &str, int indent),不同之处在于使用了文本流 stream 中指定的编码。

如果文档包含无效的XML字符或无法在给定编码中编码的字符,结果和行为是未定义的。

setNodeValue(value)
Parameters:

– str

将节点的值设置为value

另请参阅

nodeValue()

setPrefix(pre)
Parameters:

pre – str

如果节点有命名空间前缀,此函数将节点的命名空间前缀更改为 pre。否则,此函数不执行任何操作。

只有类型为ElementNodeAttributeNode的节点才能拥有命名空间。命名空间前缀必须在创建时指定;之后无法添加命名空间前缀。

toAttr()
Return type:

QDomAttr

QDomNode转换为QDomAttr。如果节点不是属性,则返回的对象将为null

另请参阅

isAttr()

toCDATASection()
Return type:

QDomCDATASection

QDomNode转换为QDomCDATASection。如果节点不是CDATA部分,返回的对象将是null

另请参阅

isCDATASection()

toCharacterData()
Return type:

QDomCharacterData

QDomNode转换为QDomCharacterData。如果节点不是字符数据节点,则返回的对象将为null

另请参阅

isCharacterData()

toComment()
Return type:

QDomComment

QDomNode转换为QDomComment。如果节点不是注释,返回的对象将是null

另请参阅

isComment()

toDocument()
Return type:

QDomDocument

QDomNode转换为QDomDocument。如果节点不是文档,则返回的对象将为null

另请参阅

isDocument()

toDocumentFragment()
Return type:

QDomDocumentFragment

QDomNode转换为QDomDocumentFragment。如果节点不是文档片段,返回的对象将是null

另请参阅

isDocumentFragment()

toDocumentType()
Return type:

QDomDocumentType

QDomNode转换为QDomDocumentType。如果节点不是文档类型,则返回的对象将为null

另请参阅

isDocumentType()

toElement()
Return type:

QDomElement

QDomNode转换为QDomElement。如果节点不是元素,则返回的对象将为null

另请参阅

isElement()

toEntity()
Return type:

QDomEntity

QDomNode转换为QDomEntity。如果节点不是实体,则返回的对象将是null

另请参阅

isEntity()

toEntityReference()
Return type:

QDomEntityReference

QDomNode转换为QDomEntityReference。如果节点不是实体引用,返回的对象将是null

另请参阅

isEntityReference()

toNotation()
Return type:

QDomNotation

QDomNode转换为QDomNotation。如果节点不是一个符号,返回的对象将是null

另请参阅

isNotation()

toProcessingInstruction()
Return type:

QDomProcessingInstruction

QDomNode转换为QDomProcessingInstruction。如果节点不是处理指令,则返回的对象将是null

toText()
Return type:

QDomText

QDomNode转换为QDomText。如果节点不是文本,返回的对象将是null

另请参阅

isText()