tinyxml linux 와 윈도 우즈 에서 의 컴 파일 및 사용 상세 설명
10225 단어 tinyxml
2. 블 로그 내용 및 모든 코드 는 이 버 전에 서 컴 파일, 실행, 테스트 통과, 예제 코드 다운로드 주소 입 니 다.
windows 다음 예제 코드:http://download.csdn.net/download/yzf279533105/9942336
Linux 다음 예제 코드: (소개 문서 가 있 습 니 다. 문서 절차 에 따라 조작 하 십시오. 성공 적 으로 실 행 될 수 있 도록 하 십시오)
정적 라 이브 러 리 의 예제 코드 사용 하기:http://download.csdn.net/download/yzf279533105/9942600
동적 라 이브 러 리 의 예제 코드 사용 하기:http://download.csdn.net/download/yzf279533105/9942605
3. Windows 에서 의 컴 파일 1. 위 주소 에서 tinyxml 다운로드 받 기2_6_2. zip 파일, 압축 풀기 tinyxml2_6_2 폴 더 2. 디 렉 터 리 에 입장 tinyxml2_6_2 / tinyxml, 소스 코드 총 2 개의 헤더 파일, 4 개의 소스 파일 을 볼 수 있 습 니 다. 각각 tinyxml. h, tinystr. h, tinyxml. cpp, tinystr. cpp, tinyxmlerror. cpp, tinyxmlparse. cpp 입 니 다. 3. tinyxml 라 이브 러 리 가 작 기 때문에 정적 라 이브 러 리 나 동적 라 이브 러 리 로 컴 파일 할 필요 가 없습니다. 위 에 열거 한 6 개의 파일 을 예제 프로젝트 디 렉 터 리 에 복사 하면 바로 사용 할 수 있 습 니 다.
4. Windows 에서 의 사용
1. HellowWorld 와 같은 빈 win 32 콘 솔 프로젝트 를 만 들 면 됩 니 다. 이 프로젝트 는 tinyxmlExample 이 라 고 명명 되 었 습 니 다. 2. 이 예제 프로젝트 루트 디 렉 터 리 에 tinyxml 폴 더 를 추가 하고 위 에 열거 한 6 개의 tinyxml 파일 을 이 디 렉 터 리 에 복사 하여 속성 페이지 설정 속성 - > C / C + + - > 일반 - > 추가 포함 디 렉 터 리 에 이 프로젝트 의 헤더 파일 디 렉 터 리 를 설정 합 니 다. 즉, ".. /" 는 루트 디 렉 터 리 가 추가 되 었 음 을 표시 합 니 다. 3. 프로젝트 에 원본 파일 을 추가 하고 tinyxml 전 체 를 포함 시 키 면 모든 코드 가 포 함 됩 니 다.
4. 원본 파일 main. cpp 를 추가 합 니 다. 코드 는 다음 과 같 습 니 다.
#include
#include "tinyxml/tinyxml.h"
using namespace std;
int main()
{
// xml
string filename = "example.xml";
//////////////////////////////////////////////////// xml ////////////////////////////////////////////////
// TiXmlDocument
TiXmlDocument* pWriteDoc = new TiXmlDocument();
// xml ( : , , )
TiXmlDeclaration* pDeclare = new TiXmlDeclaration("1.0", "UTF-8", "yes");
pWriteDoc->LinkEndChild(pDeclare); //
//
TiXmlElement* pRootElement = new TiXmlElement("telephonebook");
pWriteDoc->LinkEndChild(pRootElement); //
//
TiXmlElement* pPersonElement = new TiXmlElement("person"); //
pRootElement->LinkEndChild(pPersonElement); //
//
TiXmlElement* pNameElement = new TiXmlElement("name");
//
TiXmlText* nameContent = new TiXmlText("xiaoming"); //
pNameElement->LinkEndChild(nameContent); //
pPersonElement->LinkEndChild(pNameElement); //
//
TiXmlElement* pAddrElement = new TiXmlElement("addr"); //
//
pAddrElement->SetAttribute("addr1","hubei");
pAddrElement->SetAttribute("addr2","wuhan");
pPersonElement->LinkEndChild(pAddrElement); //
//
TiXmlElement* pEmailElement = new TiXmlElement("email");//
//
TiXmlText* emailContent = new TiXmlText("[email protected]");
pEmailElement->LinkEndChild(emailContent); //
pPersonElement->LinkEndChild(pEmailElement);//
/////////////////////////////////////////////////// ////////////////////////////////////////////////
pWriteDoc->SaveFile(filename.c_str());
printf( "new xml success, file's name is %s
", filename.c_str());
//////////////////////////////////////////////////// ////////////////////////////////////////////////
// TiXmlDocument
TiXmlDocument* pReadDocument = new TiXmlDocument();
//
if (!pReadDocument->LoadFile(filename.c_str()))
{
printf( "Could not load example xml file %s. Error='%s'
", filename.c_str(),pReadDocument->ErrorDesc() );
return 0;
}
printf("read xml file success, file' name is %s
",filename.c_str());
// ( )
TiXmlDeclaration* pDeclar = pReadDocument->FirstChild()->ToDeclaration();
if (pDeclar != NULL)
{
printf("read declare, version is %s , encoding is %s
",pDeclar->Version(), pDeclar->Encoding());
}
//
pRootElement = pReadDocument->RootElement();
//////////////////////////////////////////////////// , ////////////////////////////////////////////
printf("begin read all xml element
");
// person
// FirstChildElement() :
// NextSiblingElement :
int i = 0;
for (TiXmlElement* pItem = pRootElement->FirstChildElement("person"); pItem; pItem = pItem->NextSiblingElement("person"))
{
printf("read the %d person
",++i);
//
TiXmlElement* pName = pItem->FirstChildElement("name");
if (pName != NULL)
{
printf("the %d person's name = %s
", i, pName->GetText());
}
//
TiXmlElement* pAddr = pItem->FirstChildElement("addr");
if (pAddr != NULL)
{
//
TiXmlAttribute* pAddr1 = pAddr->FirstAttribute();
if (pAddr1 != NULL)
{
printf("the %d person's addr1 = %s
", i, pAddr1->Value());
//
TiXmlAttribute* pAddr2 = pAddr1->Next();
if (pAddr2 != NULL)
{
printf("the %d person's addr2 = %s
", i, pAddr2->Value());
}
}
}
printf("
");
}
//////////////////////////////////////////////////// , ////////////////////////////////////////////
TiXmlElement* pPerson = pRootElement->FirstChildElement("person");
if (pPerson != NULL)
{
// "email" ,
TiXmlElement* pEmail = pPerson->FirstChildElement("email");
if (pEmail != NULL)
{
pPerson->RemoveChild(pEmail);
}
// "addr"
TiXmlElement* pAddr = pPerson->FirstChildElement("addr");
if (pAddr != NULL)
{
pAddr->SetAttribute("addr2", "huanggang"); //
//
//pAddr->RemoveAttribute("addr1");
}
}
////////////////////////////////////////////////////// ////////////////////////////////////////////////
// , :person
TiXmlElement* pNewElement = new TiXmlElement("person");
//
TiXmlElement* pNameElementAdd = new TiXmlElement("name"); // :name
TiXmlText* pNameText = new TiXmlText("zhangsan");
pNameElementAdd->LinkEndChild(pNameText); //
TiXmlElement* pAddrElementAdd = new TiXmlElement("addr"); // :addr
pAddrElementAdd->SetAttribute("addr1","guangdong");
pAddrElementAdd->SetAttribute("addr2","shenzhen"); //
TiXmlElement* pEmailElementAdd = new TiXmlElement("email"); // :email
TiXmlText* pEmailText = new TiXmlText("[email protected]");
pEmailElementAdd->LinkEndChild(pEmailText); //
//
pNewElement->LinkEndChild(pNameElementAdd);
pNewElement->LinkEndChild(pAddrElementAdd);
pNewElement->LinkEndChild(pEmailElementAdd);
//
pRootElement->LinkEndChild(pNewElement);
printf("add new element success
");
/////////////////////////////////////////////////// ////////////////////////////////////////////////
if (pReadDocument->SaveFile(filename.c_str()))
{
printf("save file success
");
}
getchar();
return 0;
}
5. Linux 의 컴 파일
1. 위의 주소 에서 tinyxml 다운로드 받 기2_6_2. zip 파일, 압축 해제 명령 실행 unzip tinyxml2_6_2. zip 폴 더 tinyxml 가 져 오기
2. 정적 라 이브 러 리 로 컴 파일
2.1 디 렉 터 리 tinyxml 에 들 어가 vim 명령 으로 Makefile 파일 열기
2.2 그 중 한 줄 을 OUTPUT: = xmltest 를 OUTPUT: = libtinyxml. a 로 변경 합 니 다. 컴 파일 된 정적 라 이브 러 리 파일 이름 을 libtinyxml. a 로 표시 합 니 다.
2. 3 그 중의 한 줄 을 SRCS: = tinyxml. cpp tinyxml - parser. cpp xmltest. cpp tinyxmlerror. cpp tinystr. cpp 의 xmltest. cpp 를 삭제 합 니 다. 이 테스트 파일 을 컴 파일 할 필요 가 없 기 때 문 입 니 다.
2.4 그 중의 한 줄 을 ${LD} - o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA LIBS} 변경 ${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA LIBS} 은 정적 라 이브 러 리 로 연결 되 어 있 음 을 표시 합 니 다.
2.5 그 중의 한 줄 을 xmltest. o: tinyxml. h tinystr. h 를 삭제 합 니 다. 테스트 파일 을 컴 파일 할 필요 가 없 기 때 문 입 니 다.
2.6 Makefile 파일 저장
2.7 이전 디 렉 터 리 인 디 렉 터 리 tinyxml 에서 make 명령 을 실행 하면 이 디 렉 터 리 에서 컴 파일 된 정적 라 이브 러 리 파일 libtinyxml. a 를 얻 을 수 있 습 니 다.
3. 동적 라 이브 러 리 로 컴 파일
3.1 디 렉 터 리 tinyxml 에 들 어가 vim 명령 으로 Makefile 파일 열기
3.2 그 중의 한 줄 에 있다. DEBUG_CFLAGS := -Wall - WNo - format - g - DDebug - fpIC 의 끝 에 - fpIC 를 추가 하여 위치 와 무관 한 코드 를 컴 파일 하 는 것 을 표시 합 니 다. PIC 의 뜻 은 Position Independent Code 입 니 다.
3.3 그 중의 한 줄 RELEASE_CFLAGS := -Wall - wnnown - pragmas - wno - format - O3 의 끝 에 - fpIC 를 추가 한 이 유 는 같 습 니 다.
3.4 OUTPUT: = xmltest 를 OUTPUT: = libtinyxml. so 로 변경 합 니 다. 컴 파일 된 동적 라 이브 러 리 파일 이름 을 libtinyxml. so 로 표시 합 니 다.
3.5 그 중의 한 줄 을 SRCS: = tinyxml. cpp tinyxml - parser. cpp xmltest. cpp tinyxmlerror. cpp tinystr. cpp 의 xmltest. cpp 를 삭제 합 니 다. 이 테스트 파일 을 컴 파일 할 필요 가 없 기 때 문 입 니 다.
3.6 그 중의 한 줄 을 ${LD} - o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA LIBS} 변경 ${LD} - shared - o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA LIBS} 은 동적 라 이브 러 리 로 연 결 된 것 을 표시 합 니 다.
3.7 그 중의 한 줄 을 xmltest. o: tinyxml. h tinystr. h 를 삭제 합 니 다. 테스트 파일 을 컴 파일 할 필요 가 없 기 때 문 입 니 다.
3.8 Makefile 파일 저장
3.9 이전 디 렉 터 리 인 디 렉 터 리 tinyxml 에서 make 명령 을 실행 하면 이 디 렉 터 리 에서 컴 파일 된 동적 라 이브 러 리 파일 libtinyxml. so 를 얻 을 수 있 습 니 다.
6. Linux 에서 의 사용
1. 코드 는 4 단계 windows 의 코드 와 완전히 같 습 니 다. Makefile 을 작성 해 야 합 니 다. 예제 코드 에 있 습 니 다.
2. 링크 ux 다음 예제 코드 다운로드 주소: (소개 문서 가 있 습 니 다. 문서 절차 에 따라 조작 하여 성공 적 으로 실행 할 수 있 도록 하 십시오)
정적 라 이브 러 리 의 예제 코드 사용 하기:http://download.csdn.net/download/yzf279533105/9942600
동적 라 이브 러 리 의 예제 코드 사용 하기:http://download.csdn.net/download/yzf279533105/9942605