
/ 前段时间恰好做过类似的东西,代码可以给你参考下。
Xml配置见最后
/
typedef struct SrcFileFmt
{
int ColID;
char ColCode[64]; / 字段英文名称 /
char ColName[128]; / 字段中文名称/
char ColType[20]; / 字段类型(包含长度) /
char ColComment[128]; / 字段描述 /
}SrcFileFmt;
int main(int argc, char argv)
{
SrcFileFmt SrcFileFmt[128];
int iNum = -1;
if ( 2 > argc )
{
printf("Usage: %s SrcXmlFile\n", argv[0]);
return -1;
}
iNum = parseSourceCfg(SrcCfgFile, SrcFileFmt);
if (iNum == -1)
{
return -1;
}
return 0;
}
/ 调用此函数后,xml文件的内容会被存储到结构体数组SrcFileFmt srcfilefmt[]中
此函数依赖于libxml2-292tarxz
/
int parseSourceCfg(char FileName, SrcFileFmt srcfilefmt[])
{ / 解析源文件xml,FileName 为源xml文件名 /
xmlDocPtr doc;
xmlNodePtr cur, root;
char sFileName[64] = {'\0'};
int cnt = 0;
if (FileName == NULL)
{
return -1;
}
sprintf(sFileName, "%sxml", FileName);
doc = xmlParseFile(sFileName);
if (doc == NULL)
{
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL) {
xmlFreeDoc(doc);
return(-1);
}
if (xmlStrcmp(root->name, (const xmlChar ) "SrcRoot"))
{
xmlFreeDoc(doc);
return -1;
}
cur = root->xmlChildrenNode;
while (cur != NULL)
{
if ((!xmlStrcmp(cur->name, (const xmlChar )"Column")))
{
xmlChar key;
xmlNodePtr cur_sub = cur;
cur_sub = cur_sub->xmlChildrenNode;
while (cur_sub != NULL)
{
if ((!xmlStrcmp(cur_sub->name, (const xmlChar )"ColID"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
killblank((char)key);
srcfilefmt[cnt]ColID = atoi((char)key);
xmlFree(key);
}
if ((!xmlStrcmp(cur_sub->name, (const xmlChar )"ColCode"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
killblank((char)key);
strcpy(srcfilefmt[cnt]ColCode, (char)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar )"ColName"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
killblank((char)key);
strcpy(srcfilefmt[cnt]ColName, (char)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar )"ColType"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
killblank((char)key);
strcpy(srcfilefmt[cnt]ColType, (char)key);
xmlFree(key);
}
else if ((!xmlStrcmp(cur_sub->name, (const xmlChar )"ColComment"))) {
key = xmlNodeListGetString(doc, cur_sub->xmlChildrenNode, 1);
killblank((char)key);
strcpy(srcfilefmt[cnt]ColComment, (char)key);
xmlFree(key);
}
cur_sub = cur_sub->next;
}
cnt++;
}
cur = cur->next;
}
xmlFreeDoc(doc);
return cnt;
}
<SrcRoot>
<Column>
<ColID>1</ColID>
<ColCode>kmh</ColCode>
<ColName>字段1</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>2</ColID>
<ColCode>dfkmh</ColCode>
<ColName>字段2</ColName>
<ColType>VARCHAR(11)</ColType>
</Column>
<Column>
<ColID>3</ColID>
<ColCode>hbh</ColCode>
<ColName>字段3</ColName>
<ColType>INTEGER(10)</ColType>
</Column>
</SrcRoot>
Android解析xml文件总共有三种方法,分别是:
SAX解析XML文件: SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。如下代码:
public static List<Person> readXML(InputStream inStream) {try {
//创建解析器
SAXParserFactory spf = SAXParserFactorynewInstance();
SAXParser saxParser = spfnewSAXParser();
//设置解析器的相关特性,true表示开启命名空间特性
saxParsersetProperty(">}
DOM解析XML文件: DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM *** 作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。
Pull解析器解析XML文件: Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parsernext()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parsernextText()方法可以获取下一个Text类型元素的值
length() 方法用于返回字符串的长度。
长度等于字符串中 16 位 Unicode 代码单元的数量。
实例:
public class Test {
public static void main(String args[]) {
String Str1 = new String(">
以上程序执行结果为:
字符串 Str1 长度 :14
字符串 Str2 长度 :6
扩展资料
数组求长度用length属性
字符串求长度用length()方法
集合求长度用size()方法
数组是个对象的容器保存这固定数量的一个类型的值。数组被创建后,它的长度将不能改变的。数组的长度是个可用的不可改变的成员变量。因此长度被当做一个数组的预定于的属性。
数组有两种方法被创建:数组可以通过表达式创建。
数组初始器。当它被创建时候,这个长度是被指定的。一个数组创建表达式可以像上面例子的代码被使用。它指定的成员的类型。数组的层数,和至少一层数组的长度。
下面的声明仍然是合法的,当它指明了一层的长度。
参考资料来源:
百度百科——length
问题一:怎么测数组的长度? sizeof(a)/sizeof(a[0]) 比较好
strlen是不对的,因为strlen遇到\0就不计算后面的了,如果你的数组中间有\0就会返回错误的长度
问题二:C语言中计算数组长度的方法是什么 整形数组大小:sizeof(数组名)/sizeof(数组类型)。
字符数组大小:strlen(数组名)+1,1因为要加上'/0',所以再加1
问题三:c语言怎么获取数组的长度, sizeof(data)/siezof(data[0])
问题四:java中数组是基本类型么怎样获取一维数组的长度 在java中只有8中基本类型。数组,类,接口,都是引用类型
你可能只是定义int arr[ ] 贰实也可以定以object arr[ ]这样的数组
数组中没有arraylength()方法,只有length属性可以这样用 arraylength
问题五:在c语言中怎么判断一个数组 的长度 '\0' 只是字符串数组的结束符,对于其它类型数组没有所谓的结束符!
判断数组长度,可以使用sizeof来进行,如
int ARRAY[] = {1,1,2,2,};
printf(长度: %d\n, sizeof(ARRAY) / sizeof(int));
你可以看看长度到底是多少?并可以了解为什么是这个数,在其它编译器上也运行看看。
没有给定长度的,它通过你初始化的数据来设定长度,上面你只使用4个初始化数据,因而长度为4。
问题六:JAVA怎样获取数组长度 java list得到属猪长度的方法如下:
1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性
2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法
3java中的size()方法是针对泛型 说的,如果想看这个泛型有多少个元素,就调用此方法来查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
String []list={ma,cao,yuan};
String a=macaoyuan;
Systemoutprintln(listlength);
Systemoutprintln(alength());
List array=new ArrayList();
arrayadd(a);
Systemoutprintln(arraysize());
}
输出的值为:
3
9
1
问题七:PHP怎样获取数组的长度 php如何获取数组的长度,使用php函数count(),或是sizeof();
示例如下:
$arr = Array('0','1','2','3','4');
echo count($arr);
输出 5
$arr = array('A','B','C');
echo sizeof($arr);
输出3
问题八:C/C++中如何获取数组的长度 收藏 C、C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在 使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中则可以使用模板 技术定义一个函数,比如:template int getArrayLen(T& array){return (sizeof(array) / sizeof(array[0]));}这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。以下是两个Demo程序,一个C语言的,一个C++的:PS:若数组为存储 字符串的字符数组,则所求得的长度还需要减一,即对于宏定义: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]) - 1 );} ,对于函数定义:template int getArrayLen(T& array){return (sizeof(array) / sizeof(array[0]) - 1);}原因为存储字符串的字 符数组末尾有一个'\0'字符,需要去掉它。C语言#include #include #define GET_ARRAY_LEN(array,len){len = (sizeof(array) / sizeof(array[0]));}定义一个带参数的 宏,将数组长度存储在变量len中int main(){char a[] = {'1','2','3','4'};int len;GET_ARRAY_LEN(a,len)调用预定义的宏,取得数组a的长度,并将其存储在变量len中printf(%d
,len);system(pause);return 0;}C++#include using namespace std;template int getArrayLen(T& array){使用模板定义一 个函数getArrayLen,该函数将返回数组array的长度return (sizeof(array) / sizeof(array[0]));}int main(){char a[] = {'1','2','3'};cout 问题九:javascript如何取数组长度 var arr=new Array();
var len=arrlength;
以上就是关于c语言如何解析xml并将所有内容存入数组全部的内容,包括:c语言如何解析xml并将所有内容存入数组、android里面怎么解析xml、使用方法length( )可以获得字符串或数组的长度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)