البته اینم بگم که روش درست تر از نظر برنامه نویسی، نوشتن یک برنامه کوچیک است که واقعا ایکس ام ال رو بفهمه و چیزی که می خوای رو نشون بده.
سلام
ببخشید که من پس از حل شدن موضوع پاسخ ارسال میکنم.
سعی کردم با سی یه برنامه کوچیک برای این کار بنویسم:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//max line length for reading
#define LINE_LENGTH 800
int main(int argc, char *argv[])
{
FILE *file;
char line[LINE_LENGTH];
char *begin, *end, *i;
//check if we have 2 args
if (argc != 2)
{
fprintf(stderr, "Invalid arguments.");
exit(EXIT_FAILURE);
}
//use first arg as file address
file = fopen(argv[1], "r");
//read the file and search for lines with <Tag>
while (fgets(line, LINE_LENGTH, file) != NULL)
if (strstr(line,"<Tag>") != NULL && strstr(line,"</Tag>") != NULL)
{
//find beginning & end of the phrase
begin = strstr(line, "<Tag>") + 5;
end = strstr(line, "</Tag>");
//print the phrase
for (i = begin ; i < end ; i++)
putchar(*i);
//print a new line after each phrase
printf("\n");
}
fclose(file);
return(EXIT_SUCCESS);
}
این برنامه فایل رو خط به خط میخونه. (تا سقف ۸۰۰ کاراکتر یرای هر خط)
بعد دنبال خطهایی میگرده که دارای عبارتهای <Tag> و </Tag> باشند.
وقتی خط رو پیدا کرد کاراکترهایی که بین این دو عبارت هستند رو چاپ میکنه.
مثلا فایل xml ما به این صورت هست:
ansa<Tag>salam</Tag> fdf
s
<Tag>ahmad</Tag>cc
برای استفاده، متن برنامه رو توی یه فایل به اسم find.c ذخیره کنید.
و سپس:
ahmad@ahmad-desktop:~/test$ gcc find.c -o find
ahmad@ahmad-desktop:~/test$ ./find new.xml
salam
ahmad
همچنین میتونید خروجی رو به یک فایل تغییر بدید تا عبارتها توی اون فایل ذخیره بشه:
./find new.xml >output