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>