能否使用堆栈或链表的方法处理?????

cocogi 2002-09-25 05:53:02
可否运用堆栈原理,或者链表的方式处理以下资料,也就是把<tag></tag>中没有内容的多余tag去除掉!原tag层次不乱

原始资料:
<jyukugo id="crcj000150-010">
<jyukugomidashi>
<jyukugokantaiji><gb>过</gb></jyukugokantaiji>
<jyukugopinyin>8B69798B</jyukugopinyin>
</jyukugomidashi>
<jyukugokaisetsu>
<kugiri>
<yourei>
</yourei>
</kugiri>
<kugiri>
<yourei>
</yourei>
</kugiri>
</jyukugokaisetsu>
</jyukugo>

转换后的资料:
<jyukugo id="crcj000150-010">
<jyukugomidashi>
<jyukugokantaiji><gb>过</gb></jyukugokantaiji>
<jyukugopinyin>8B69798B</jyukugopinyin>
</jyukugomidashi>
</jyukugo>


如能给出代码,不胜感激!!!
davidliu96@hotmail.com
...全文
29 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lesily 2002-09-26
  • 打赏
  • 举报
回复
吾不知所云,只能一语:学。
cocogi 2002-09-26
  • 打赏
  • 举报
回复
多谢do_do(do_do)
cocogi 2002-09-26
  • 打赏
  • 举报
回复
多谢do_do(do_do)
blh 2002-09-26
  • 打赏
  • 举报
回复
需要吗??
一个一个字符分析,当读到<,不记录字符,直到读到>为止
Last_Dodo 2002-09-26
  • 打赏
  • 举报
回复
应该很简单,没必要用DOM或SAX(overkill,杀猪用牛刀)。
试试下面的程序。它的条件是被去除的<tag>和</tag>各自占一行。把这个条件去掉不难。我没有用string因为我不熟且STL的参考书不在身边。

#include <stack>
#include <fstream>

int main(int argc, char **argv)
{
if (argc < 2){
std::cerr << "Usage: " << argv[0] << " <XML file name>\n";
return 1;
}

std::ifstream inFile(argv[1]);

if (!inFile.good()) {
std::cerr << "Failed to open the XML file [" << argv[1] << "]\n";
return 2;
}

std::stack<char*> backward;
char buffer[8192], *tmp;
while (!inFile.eof()){
inFile.getline(buffer, 8192);
tmp = strstr(buffer, "</");
if (tmp == NULL){
char *newLine = new char[strlen(buffer)+1];
strcpy(newLine, buffer);
backward.push(newLine);
continue;
}
tmp +=2;
const char *lastString = backward.top();
lastString = strstr(lastString, tmp);
if (lastString && strcmp(lastString, tmp) == 0) backward.pop();
else {
char *newLine = new char[strlen(buffer)+1];
strcpy(newLine, buffer);
backward.push(newLine);
}
}

std::stack<char*> result;
while (!backward.empty()){
result.push(backward.top());
backward.pop();
}

while (!result.empty()){
char *aLine = result.top();
std::cout << aLine << std::endl;
result.pop();
delete aLine;
}

return 0;
}
ice1010 2002-09-25
  • 打赏
  • 举报
回复
hello_wyq(半瓶墨水)说的对,用XML解析器的DOM方式或SAX方式都可以,你在网上能够找到他们的介绍.
ylbug 2002-09-25
  • 打赏
  • 举报
回复
应该可以用堆栈吧
hello_wyq 2002-09-25
  • 打赏
  • 举报
回复
这个不是挺简单的,你到网站上看一看解析xml的源代码,然后再稍微改动一下就可以了。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧