linux下读写xml文件


linux下读写xml文件

说明:由于linux开发板有些系统配置文件是xml文件,所以需要简单的修改xml中的元素内容,于是在网上找开源的xml读写库。

mini-xml一个简单的xml读写库,优点是小,方便。
下载地址:https://www.msweet.org/mxml/
此文章基于Mini-XML 3.1版本

具体移植步骤如下:

1、将下载后的压缩包在linux下执行"tar -zxvf mxml-3.1.tar.gz"命令进行解压缩;
2、进入mxml-3.1目录下执行"./configure --prefix=/home/ulinux/mxml-3.1/local --host=arm-linux";
3、第2步执行完成后会在mxml-3.1目录下生产一个Makefile文件,执行make,再执行make install即可;
4、在/home/ulinux/mxml-3.1/local目录下即有lib、include和share三个文件夹,相关文件即在其中;

注意:
a.如果是想在32位linux开发板上使用mxml,则需要修改Makefile,并且需要编译环境下有交叉编译工具链;
否则使用默认环境及编译工具只能生成当前环境下可用的库文件,切记切记;
b.Makefile中按照目标环境,修改AR、CC、RANLIB即可;
c.交叉编译工具所在路径需要导入到环境变量中;

具体测试代码如下(linux虚拟机下测试)

int  main(void)
{
    int fd = 0;
    char ip[]="192.168.1.1";
    mxml_node_t *tree = NULL, *node = NULL;

    fd =  open("./mobileap_cfg.xml", O_RDWR | O_CREAT,0666);
    if(fd < 0)
    {
	printf("open mobileap_cfg.xml error");
    }

    /*MXML_OPAQUE_CALLBACK选项,直接读原始字符串,不按照空格来区分元素*/	
    tree = mxmlLoadFd(NULL, fd, MXML_OPAQUE_CALLBACK);
    if(tree == NULL)
    {
	printf("mxmlLoadFd error");
    }

    node = mxmlFindElement(tree, tree, "APIPAddr",
                           NULL, NULL,
                           MXML_DESCEND);
    if(node == NULL)
    {
	printf("mxmlFindElement error");
    }

    if(strcmp(node->child->value.opaque, ip) != 0)
    {
        int ret = mxmlSetOpaque(node->child, ip);
	lseek(fd,0,SEEK_SET);
    	ret = mxmlSaveFd(tree,fd, MXML_NO_CALLBACK);
        printf("ip set complete, ret=%d", ret);
    }

    close(fd);
    mxmlDelete(tree);
}

友情链接:
a.mxml中文文档:https://blog.csdn.net/bluesonic/article/details/3887143;

mobileap_cfg.xml文件内容如下:

<?xml version="1.0"?>
<system xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="mobileap_cfg.xsd">
	<MobileAPCfg>
		<MobileAPNatCfg>
			<Firewall>/etc/data/mobileap_firewall.xml</Firewall>
			<NatEntryGenericTimeout>200</NatEntryGenericTimeout>
			<NatEntryICMPTimeout>30</NatEntryICMPTimeout>
			<NatEntryTCPEstablishedTimeout>3600</NatEntryTCPEstablishedTimeout>
			<NatEntryUDPTimeout>60</NatEntryUDPTimeout>
			<DmzIP>0.0.0.0</DmzIP>
			<EnableIPSECVpnPassthrough>1</EnableIPSECVpnPassthrough>
			<EnablePPTPVpnPassthrough>1</EnablePPTPVpnPassthrough>
			<EnableL2TPVpnPassthrough>1</EnableL2TPVpnPassthrough>
			<EnableSOCKSv5Proxy>0</EnableSOCKSv5Proxy>
			<SOCKSv5ProxyConfFile>/etc/data/qti_socksv5_conf.xml</SOCKSv5ProxyConfFile>
			<SOCKSv5ProxyAuthFile>/etc/data/qti_socksv5_auth.xml</SOCKSv5ProxyAuthFile>
			<EnableWebserverWWANAccess>0</EnableWebserverWWANAccess>
			<NATType>SYM</NATType>
			<ALGCfg>
				<EnableRTSPAlg>0</EnableRTSPAlg>
				<EnableSIPAlg>1</EnableSIPAlg>
			</ALGCfg>
			<Initial_Pkt_Limit>0</Initial_Pkt_Limit>
		</MobileAPNatCfg>
		<MobileAPLanCfg>
			<EnableIPV4>1</EnableIPV4>
			<EnableIPV6>1</EnableIPV6>
			<GatewayURL>mobileap.qualcomm.com</GatewayURL>
			<WlanMode>AP</WlanMode>
			<WlanRestartDelay>1</WlanRestartDelay>
			<MobileAPSTABridgeEnable>0</MobileAPSTABridgeEnable>
			<HostAPDCfg>/etc/misc/wifi/hostapd.conf</HostAPDCfg>
			<HostAPDEntropy>/data/entropy_file</HostAPDEntropy>
			<STAModeHostAPDCfg>/etc/misc/wifi/sta_mode_hostapd.conf</STAModeHostAPDCfg>
			<APIPAddr>192.168.0.50</APIPAddr>
			<SubNetMask>255.255.255.0</SubNetMask>
			<EnableDHCPServer>1</EnableDHCPServer>
			<DHCPCfg>
				<StartIP>192.168.0.90</StartIP>
				<EndIP>192.168.0.130</EndIP>
				<LeaseTime>43200</LeaseTime>
			</DHCPCfg>
			<IPPassthroughCfg>
				<IPPassthroughEnable>0</IPPassthroughEnable>
				<IPPassthroughDeviceType>-1</IPPassthroughDeviceType>
				<IPPassthroughHostName>0</IPPassthroughHostName>
				<IPPassthroughMacAddr>0</IPPassthroughMacAddr>
			</IPPassthroughCfg>
			<GuestAPCfg>
				<HostAPDCfg>/etc/misc/wifi/hostapd-wlan1.conf</HostAPDCfg>
				<HostAPDEntropy>/data/entropy_file1</HostAPDEntropy>
				<AccessProfile>INTERNETONLY</AccessProfile>
			</GuestAPCfg>
			<GuestAP2Cfg>
				<HostAPDCfg>/etc/misc/wifi/hostapd-wlan2.conf</HostAPDCfg>
				<HostAPDEntropy>/data/entropy_file2</HostAPDEntropy>
				<AccessProfile>INTERNETONLY</AccessProfile>
			</GuestAP2Cfg>
			<GuestAP3Cfg>
				<HostAPDCfg>/etc/misc/wifi/hostapd-wlan3.conf</HostAPDCfg>
				<HostAPDEntropy>/data/entropy_file3</HostAPDEntropy>
				<AccessProfile>INTERNETONLY</AccessProfile>
			</GuestAP3Cfg>
			<StationModeCfg>
				<SupplicantCfg>/etc/misc/wifi/wpa_supplicant.conf</SupplicantCfg>
				<STAModeConnType>1</STAModeConnType>
				<StaticIPAddr>0</StaticIPAddr>
				<StaticConfigDNSAddr>0</StaticConfigDNSAddr>
				<StaticConfigGWAddr>0</StaticConfigGWAddr>
				<StaticConfigNetMask>0</StaticConfigNetMask>
			</StationModeCfg>
			<AlwaysOnWLAN>0</AlwaysOnWLAN>
		</MobileAPLanCfg>
		<MobileAPWanCfg>
			<EriConfig>/data/mobileap_eri_config.bin</EriConfig>
			<FirstPreferredBackhaul>bt-pan</FirstPreferredBackhaul>
			<SecondPreferredBackhaul>eth</SecondPreferredBackhaul>
			<ThirdPreferredBackhaul>usb_cradle</ThirdPreferredBackhaul>
			<FourthPreferredBackhaul>wlan</FourthPreferredBackhaul>
			<FifthPreferredBackhaul>wwan</FifthPreferredBackhaul>
			<Profile>1</Profile>
			<AutoConnect>0</AutoConnect>
			<Roaming>1</Roaming>
			<TECH>ANY</TECH>
			<V4_UMTS_PROFILE_INDEX>15</V4_UMTS_PROFILE_INDEX>
			<V4_CDMA_PROFILE_INDEX>15</V4_CDMA_PROFILE_INDEX>
			<V6_UMTS_PROFILE_INDEX>15</V6_UMTS_PROFILE_INDEX>
			<V6_CDMA_PROFILE_INDEX>15</V6_CDMA_PROFILE_INDEX>
			<DefaultSIPServerConfigType>FQDN</DefaultSIPServerConfigType>
			<DefaultSIPServerConfig>abcd.com</DefaultSIPServerConfig>
			<PrefixDelegation>0</PrefixDelegation>
		</MobileAPWanCfg>
		<MobileAPSrvcCfg>
			<UPnP>0</UPnP>
			<DLNA>0</DLNA>
			<MDNS>0</MDNS>
			<DLNAWhitelistingAllow>0</DLNAWhitelistingAllow>
		</MobileAPSrvcCfg>
		<DDNSCfg>
			<EnableDDNS>0</EnableDDNS>
			<DDNSServer>members.dyndns.org</DDNSServer>
			<DDNSProtocol>dyndns2</DDNSProtocol>
			<DDNSLogin>user_defined</DDNSLogin>
			<DDNSPassword>user_defined</DDNSPassword>
			<DDNSHostname>mobileap.dyndns.org</DDNSHostname>
			<DDNSTimeout>60</DDNSTimeout>
		</DDNSCfg>
		<TinyProxyCfg>
			<EnableTinyProxy>0</EnableTinyProxy>
		</TinyProxyCfg>
		<Dhcpv6Cfg>
			<EnableDhcpv6Dns>0</EnableDhcpv6Dns>
		</Dhcpv6Cfg>
		<MobileAPBootUpCfg>
			<MobileAPEnableAtBootup>0</MobileAPEnableAtBootup>
			<WLANEnableAtBootup>0</WLANEnableAtBootup>
			<DataPathOpt>0</DataPathOpt>
		</MobileAPBootUpCfg>
		<Cradle>
			<CradleMode>2</CradleMode>
		</Cradle>
		<EthBackhaul>
			<EthBackhaulMode>0</EthBackhaulMode>
		</EthBackhaul>
		<PacketStats>
			<PacketStatsCfg>0</PacketStatsCfg>
		</PacketStats>
		<vlan />
		<L2TPConfig>
			<enable>0</enable>
			<MTU_enable>0</MTU_enable>
			<TCP_MSS_enable>0</TCP_MSS_enable>
		</L2TPConfig>
		<GSBConfig>
			<GSBBootUpcfg>0</GSBBootUpcfg>
			<num_of_entries>0</num_of_entries>
		</GSBConfig>
		<DunDongleMode>0</DunDongleMode>
		<PMIPv6>
			<EnablePMIPmode>0</EnablePMIPmode>
			<EnablePMIPDebugmode>0</EnablePMIPDebugmode>
			<PMIPmodeType>6</PMIPmodeType>
			<LMAv6Address>::</LMAv6Address>
			<LMAv4Address>0</LMAv4Address>
			<PMIPTunnelType>6</PMIPTunnelType>
			<PMIPV4WorkMode>0</PMIPV4WorkMode>
			<PMIPV4SecRouterDMNPPrefix>0</PMIPV4SecRouterDMNPPrefix>
			<PMIPV4SecRouterdmnpPrefixLen>0</PMIPV4SecRouterdmnpPrefixLen>
			<PMIPMobileNodeIdentifierType>0</PMIPMobileNodeIdentifierType>
			<PMIPMobileNodeIdentifierString>-1</PMIPMobileNodeIdentifierString>
			<PMIPServiceSelectionString>-1</PMIPServiceSelectionString>
		</PMIPv6>
	</MobileAPCfg>
</system>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM