Qt解析XML相关(QDom方式)
来源:互联网 发布:linux系统管理技术手册 编辑:程序博客网 时间:2024/06/07 15:44
一、根据QDomNode::TypeName名字找到第一个符合的node :
以下两个函数可以直接查询XML节点(QDomNode)是否存在名字tagName的子节点,不需要遍历子节点。firstChildElement 或者 namedItem.
/* Shortcut to avoid dealing with QDomNodeList * all the time. */ QDomNode namedItem(const QString& name) const;
QDomElement firstChildElement(const QString &tagName = QString()) const;
与 firstChildElement 类似的(即可根据tagNeme查找子节点的函数)还有以下
QDomElement firstChildElement(const QString &tagName = QString()) const; QDomElement lastChildElement(const QString &tagName = QString()) const; QDomElement previousSiblingElement(const QString &tagName = QString()) const; QDomElement nextSiblingElement(const QString &taName = QString()) const;
上面这四个函数可以用来遍历子节点,与之类似的还有:firstChild(), nextSibling(), lastChild(), previousSibling(), parentNode().
for(QDomElement sElem = elem.firstChildElement(); !sElem.isNull(); sElem = sElem.nextSiblingElement())for(QDomElement sElem = elem.firstChildElement("要查找的tagName"); !sElem.isNull(); sElem = sElem.nextSiblingElement("要查找的tagName"))
他们的不同点是:firstChildElemment()查找的是必须有 nodeName有节点名字的节点,返回的是 element;函数中的参数就是nodename,可写可不写,有这个参数,就表明遍历的是 tagName 为某固定字符串的子节点;firstChild()查找所有子节点的第一个(不论有无nodeName),返回的是 node;
综上,在for 循环中遍历子节点,用firstChildElemment()、nestSiblingElemment() 和 firstChild()、nestSibling() 的遍历次数是不一样的,因为没有节点名的节点没有被firstChildElemment() 查找;
二、根节点解析:
QDomElement root = dom->documentElement(); QDomNodeList nodelist = root.childNodes();
三、解析节点中间<..> XXXXX </..>的文本 XXXXX
例如 <cor:Uri xsi:nil="false">mmarch://bin/DBE406EB-824C-48B9-AE93-9C3C7BECCB5A.bin</cor:Uri> ,使用
QString QDomElement::text() const;
四、保存element
解析XML文件的时候,常遇到的一个问题就是要修改element的值然后保存
QDomElement el = node_2.toElement(); //tag为key的节点QDomNode oldnode = el.firstChild(); //标签之间的内容作为节点的子节点出现,得到原来的子节点el.firstChild().setNodeValue(str); //用提供的value值来设置子节点的内容QDomNode newnode = el.firstChild(); //值修改过后的子节点el.replaceChild(newnode,oldnode); //调用节点的replaceChild方法实现修改功能
QDom 保存到文本流
xmldoc.save(out, 4, QDomNode::EncodingFromDocument);
原型:
void QDomNode::save(QTextStream &stream, int indent, EncodingPolicy encodingPolicy = QDomNode::EncodingFromDocument) const
五、遍历节点的属性
attribute() 函数,返回QDomNamedNodeMap 类型变量
QDomNamedNodeMap attrs = custElem.attributes(); int size = attrs.size(); for(int i=0; i< size; ++i) { QDomNode node = attrs.item(i); qDebug() << " node Name : Value :" << node.nodeName() << node.nodeValue(); }
六、 拷贝节点,避免引用
QDomNode cloneNode(bool deep = true) const;
七、 节点 <node/> 不为空 Null
bool QDomNode::isNull() const节点 <node/> 调用 isNull,返回false;这个函数应该是判断有无此节点.
八、获取 XML 子节点:直系子节点 / 子孙~~节点
//QDomNode ::QDomNodeList childNodes() const;//Returns a list of all direct child nodes. 直接的子节点//QDomElement 和 QDocumentQDomNodeList elementsByTagName(const QString& tagname) const;//深层递归,获取所有子节点
0 0
- Qt解析XML相关(QDom方式)
- QT开发(四十二)——DOM方式解析XML
- Qt 中sax方式 解析 xml文件
- QT读写XML文件之DOM方式解析XML
- QT开发(四十三)——SAX方式解析XML
- 【XML】XML解析方式
- 【XML】XML解析方式
- xml-xml解析方式
- Qt解析XML文件(QDomDocument)
- 初识---Qt解析XML文件(QDomDocument)
- Qt之解析XML(QXmlStreamReader)
- Qt之解析XML元素(QXmlStreamReader)
- qt 之解析 XML(QXmlStreamReader)
- qt 之解析XML元素(QXmlStreamReader)
- Qt之读(解析)XML文件
- Qt解析xml
- qt xml 解析
- qt解析xml文件
- AngularJS SpringMVC解决post参数获取失败
- svn window版本服务器端安装
- python判断字符串是否为空
- css-dom(js dom编程艺术第九章笔记)
- 病毒分析2
- Qt解析XML相关(QDom方式)
- html中对hidden状态input控件进行赋值,而赋的值中包含标签,例如"<img~~~>",这样的话>就会导致input控件被截断!
- 位运算实现a+b
- 设计模式之五:原型模式—对象的克隆
- Ubuntu 快捷键
- NEHotspotHelper的使用和申请
- MySQL 主从配置和基于Spring 的读写分离
- 分布式消息队列kafka系列介绍 — 配置文件详解
- java特殊符号替换