简单XML操作类

1 篇文章 0 订阅
/// <summary>  
        /// 返回XMl文件指定元素的指定属性值  
        /// </summary>  
        /// <param name="xmlElement">指定元素</param>  
        /// <param name="xmlAttribute">指定属性</param>  
        /// <returns></returns>  
        public static bool getXmlValue(string key, out string value)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlName);

            XmlNode xmlNode = xmlDoc.SelectSingleNode("root");

            XmlNodeList xmlList = xmlNode.SelectNodes("data");

            foreach (XmlElement temp in xmlList)
            {
                if (temp.GetAttribute("key").ToString() == key)
                {
                    value = temp.GetAttribute("value");
                    return true;
                }
            }

            value = "";
            return false;
        }

        /// <summary>  
        /// 设置XMl文件指定元素的指定属性的值  
        /// </summary>  
        /// <param name="xmlElement">指定元素</param>  
        /// <param name="xmlAttribute">指定属性</param>  
        /// <param name="xmlValue">指定值</param>  
        public static bool setXmlValue(string key, string value)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlName);

            XmlNode xmlNode = xmlDoc.SelectSingleNode("root");

            XmlNodeList xmlList = xmlNode.SelectNodes("data");

            foreach (XmlElement temp in xmlList)
            {
                if (temp.GetAttribute("key").ToString() == key)
                {
                    temp.SetAttribute("value", value);
                    xmlDoc.Save(xmlName);
                    return true;
                }
            }

            return false;

        }

        /// <summary>
        /// 增加一个属性存储
        /// </summary>
        /// <param name="xmlElement"></param>
        /// <param name="xmlAttribute"></param>
        /// <param name="xmlValue"></param>
        public static bool addValue(string xmlElement, string key, string value)
        {
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.Load(xmlName);

            //XmlElement xmlNode = xmlDoc.CreateElement(xmlElement);
            //xmlNode.SetAttribute("key", key);
            //xmlNode.SetAttribute("value", value);

            //XmlNode xml = xmlDoc.DocumentElement.PrependChild(xmlNode);
            //xmlDoc.Save(xmlName);

            bool isExist = false;

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlName);

            XmlNode xmlNode1 = xmlDoc.SelectSingleNode("root");

            XmlNodeList xmlList = xmlNode1.SelectNodes("data");

            foreach (XmlElement temp in xmlList)
            {
                if (temp.GetAttribute("key").ToString() == key)
                {
                    isExist = true;
                }
            }

            if (!isExist)
            {
                XmlElement xmlNode = xmlDoc.CreateElement(xmlElement);
                xmlNode.SetAttribute("key", key);
                xmlNode.SetAttribute("value", value);

                XmlNode xml = xmlDoc.DocumentElement.PrependChild(xmlNode);
                xmlDoc.Save(xmlName);
                return true;
            }

            return false;
        }

        /// <summary>
        /// 遍历方法
        /// </summary>
        /// <param name="orglist"></param>
        /// <param name="xmlElement"></param>
        /// <returns></returns>
        public static IDictionary<string, string> Search(List<string> orglist)
        {
            IDictionary<string, string> dic = new Dictionary<string, string>();

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlName);

            XmlNode xmlNode1 = xmlDoc.SelectSingleNode("root");

            XmlNodeList xmlList = xmlNode1.SelectNodes("data");

            foreach (XmlElement temp in xmlList)
            {
                foreach (string tempOrg in orglist)
                {
                    if (temp.GetAttribute("key").ToString() == tempOrg)
                    {
                        dic.Add(tempOrg, temp.GetAttribute("value").ToString());
                    }
                }
            }

            return dic;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中提供了QXmlStreamReader和QXmlStreamWriter两个来读写XML文件,可以根据需要自己封装一个操作XML文件的。以下是一个简单的封装XmlHelper,可以实现读取和写入XML文件的基本操作。 ``` #include <QXmlStreamReader> #include <QXmlStreamWriter> #include <QFile> class XmlHelper { public: XmlHelper(const QString& fileName) { m_fileName = fileName; } // 读取XML文件中指定节点的值 QString readValue(const QString& nodeName) { QFile file(m_fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); QXmlStreamReader reader(&file); while (!reader.atEnd()) { if (reader.isStartElement() && reader.name() == nodeName) { reader.readNext(); return reader.text().toString(); } else { reader.readNext(); } } return QString(); } // 写入XML文件中指定节点的值 void writeValue(const QString& nodeName, const QString& value) { QFile file(m_fileName); if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) return; QXmlStreamReader reader(&file); QXmlStreamWriter writer(&file); writer.setAutoFormatting(true); while (!reader.atEnd()) { if (reader.isStartElement() && reader.name() == nodeName) { // 找到节点,修改节点的值 reader.readNext(); writer.writeStartElement(nodeName); writer.writeCharacters(value); writer.writeEndElement(); } else { // 没有找到节点,继续向下读取 writer.writeCurrentToken(reader); reader.readNext(); } } // 文件中没有指定节点,添加节点 if (reader.hasError()) return; writer.writeStartElement(nodeName); writer.writeCharacters(value); writer.writeEndElement(); } private: QString m_fileName; }; ``` 使用示例: ``` XmlHelper helper("config.xml"); // 读取XML文件中的值 QString name = helper.readValue("name"); QString age = helper.readValue("age"); // 写入XML文件中的值 helper.writeValue("name", "Tom"); helper.writeValue("age", "20"); ``` 以上代码是一个简单的示例,实际应用中还需根据实际需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值