[ XML ] Cú pháp căn bản trong XML [ XML syntax rules ]

Nói chung các quy tắc của XML rất đơn giản hợp lý, dễ học và dễ sử dụng.


1. Tất cả các yếu tố của XML phải có thẻ đóng (closing tag).
- Các yếu tố trong HTML không cần phải có thẻ đóng.
  <p>This is a paragraph
  <p>This is another paragraph

- Trong XML, việc bỏ qua thẻ đóng là không hợp lệ. Tất cả các yếu tố phải có thẻ đóng. Do dó với ví dụ trên trong XML sẽ là:
  <p>This is a paragraph</p>
  <p>This is another paragraph</p>

* Lưu ý: Những phần khai báo ở đầu tài liệu XML không có thẻ đóng. Đó không phải là lỗi. Khai báo đó không phải là một phần trong chính tài liệu XML đó, và nó không có thẻ đóng.

2. Yếu tố chính xác các thẻ của XML.
- Các thẻ trong XML yêu cầu một sự chính xác. Ví dụ thẻ <Letter> sẽ khác với thẻ <letter>.

- Thẻ đóng và thẻ mở phải được viết cùng một trường hợp.
   <message>This is incorrect</message>
   <message>This is correct</message>

* Lưu ý: thẻ mở và thẻ đóng cũng thường được gọi là thẻ bắt đầu và thẻ kết thúc. Bạn có thể sử dụng nó theo ý thích của bạn, nhưng nó phải chính xác.

3. Các yếu tố trong XML phải được lồng nhau đúng cách

- Trong HTML các bạn có thể thấy các yếu tố không đúng cách viết lông nhau
   <b><i>This text is bold and italic</b></i>
- Trong XML tất cả các yếu tố phải được lồng nhau đúng quy định:
  <b><i>This text is bold and italic</i></b>

Trong ví dụ trên, lồng nhau đúng cách ở đây được hiểu là kể tử khi phần tag <i> được mở trong tag <b>. Thì nó phải được đóng bên trong tag <b>.

4. Tài liệu XML phải có một phần tử gốc

Tài liệu XML phải có một yếu tố chứa tất cả các yếu tố khác. Yếu ôố này được gọi là phần tử gốc.
 <root>
  <child>
     <subchild>.....</subchild>
  </child>
 </root>

5. Các giá trị thuộc tính trong XML phải trích dẫn

- Các yếu tố trong XML có thể có các thuộc tính trong cặp tên/giá trị giống như trong HTML.

- Trong XML các giá trị thuộc tính luôn luôn phải được trích dẫn(quoted).

- Chúng ta hãy xem 2 ví dụ dưới đây về cách sử dụng thuộc tính trong XML, ví dụ 1 là sai, ví dụ 2 là đúng.

Ví dụ 1: sai.
<note date=12/11/2007>
  <to>Love</to>
  <from>Jani</from>
</note>

Ví dụ 2: sử dụng đúng
<note date="12/11/2007">
  <to>Tove</to>
  <from>Jani</from>
</note>

Lỗi trong ví dụ 1 là thuộc tính ngày trong phần tử node không trích dẫn.

6. Tham chiếu thực thể (Entity Reference).

- Một số ký tự có ý nghĩa đặc biệt trong XML.

- Nếu như bạn đặt ký tự “<” bên trong một phần tử của XML nó sẽ tạo ra một lỗi bởi vì phân tích các giải thích đó là khởi đầu của một phần tử mới.

- Điều này sẽ tạo ra một lỗi XML:
<message>if salary < 1000 then</message>
Vậy làm sao để sử dụng ký tự “<” trong một phần tử của XML. Câu trả lời là thay thế ký tự “<” bằng một tham chiếu thực thể &lt;
<message>if salary &lt; 1000 then</message>

- Chúng ta có 5 tham chiếu thực thể được định nghĩa trước trong XML:



* Lưu ý: Chỉ có ký tự “<” và “&” là không hợp lệ nghiêm ngặt trong XML. Các ký tự “>” là hợp pháp, nhưng sử dụng tham chiếu thực thể &gt; để thay thế cho nó sẽ tạo một thói quen tốt.

7. Chú thích trong XML (Comments in XML)

Cú pháp các chú thích trong XML là tương tự HTML.

<!– This is a comment –>

8. Khoảng trắng (white-space) được giữ lại trong XML

HTML cắt bỏ nhiều ký tự trắng trắng thành một ký tự trắng đơn.



- Với XML, ký các ký tự trắng trong tài liệu không được cắt bỏ.

9. XML lưu trữ một dòng mới như LF(Line Feed)

Trong các ứng dụng của Windows, một dòng mới là một lưu trữ bình thường như một cặp ký tự: carriage return (CR) và chuyển dòng(LF – Line Feed). Trong các ứng dụng của Unix, một dòng mới là bình thường được lưu trữ như một ký tự LF. XML lưu trữ một dòng mới như LF.

Tham khảo thanhcuong

[ Java ] Code Java tải website về máy tính [ Download URL ]

Chương trình Java download URL:
- Nhập địa chỉ URL cần download
- Kết quả download được lưu tại output.htm, trong thư mục chứa Project

* Để download từ địa chỉ URL cần sử dụng 2 thư viện:
    + java.net.URL
    + java.net.URLConnection

[Code Java]

/******************************************************************************
 http://lap-trinh-may-tinh.blogspot.com/
******************************************************************************/

package download_java;
import java.util.Scanner;

public class  Download_java
{
  public static void main(String[] args) throws Exception
  {
    // Nhập địa chỉ URL cần download
      Scanner in=new Scanner(System.in);
    System.out.print("\n Nhập URL: ");
    String str_url=in.nextLine();
    // Địa chỉ URL cần download
    java.net.URL url = new java.net.URL(str_url);
    java.net.URLConnection con = url.openConnection();

    java.io.InputStream is=con.getInputStream();

    // Kết quả được lưu trên output.htm trong thư mục chứa Project
    String output_file="output.htm";
    java.io.FileOutputStream os=new java.io.FileOutputStream(output_file);

    int BUF_SIZE=1024; // KB
    byte[] buffer = new byte[BUF_SIZE];
   
    while (true)
    {
      int n = is.read(buffer);  // đọc data URL
      if (n>0) os.write(buffer,0,n);     // ghi vào file
      if (n<0) break;    // kế thúc đọc
    }
  }
}

[Download Project tại đây]

[Thuật toán Tìm kiếm tuần tự] Ví dụ sử dụng thuật toán tìm kiếm tuần tự [C\C++]

Thuật toán tìm kiếm tuần tự 

Ví dụ sử dụng thuật toán tìm kiếm tuần tự: Viết các hàm thực hiện
 1. Nhập dãy số nguyên có n số (1<n<100).
 2. In dãy vừa nhập
 3. Tìm giá trị x trong dãy số (x nhập từ bàn phím)
 4. Đếm số lần xuất hiện của y (y nhập từ bàn phím)
 5. Tính giá trị phần trăm các số >=5.
 6. In ra vị trí xuất hiện các số nguyên tố có trong dãy.


[Code Turbo C++]

/*

http://lap-trinh-may-tinh.blogspot.com/

*/
#include<iostream.h>
#include<conio.h>
#include<stdio.h>

// khai bao
int a[100],n;

// Nhap mang
void Nhap(){
  cout<<"\n + NHAP MANG : ";
  cout<<"\n - Nhap so phan tu: ";
  do{
       cout<<"\n n= "; cin>>n;
       if(n<1||n>100)
             cout<<"\n Nhap lai n!";
  } while (n<1||n>100);

  // Nhap mang
  cout<<"\n - Nhap mang : ";
  for (int i=0;i<n;i++)
   {
       cout<<"\n a["<<i<<"]= ";
       cin>>a[i];
    }
   }

// In day
void InDay(int a[],int n){
  cout<<"\n + IN DAY \n";
  for(int i=0;i<n;i++)
      cout<<a[i]<<"; ";
 }

// Tim x trong day
void Tim_x(int x, int a[], int n){
   cout<<"\n + TIM KIEM "<< x <<" TRONG DAY:";
   int t=0;
   for(int i=0;i<n;i++)
     if(x==a[i])
        t=1;
   if(t==1)
      cout<<"\n Tim thay "<<x<<" trong day ";
   else
      cout<<"\n Khong tim thay "<<x<<" trong day ";
}

// Dem so lan xuat hien cua y trong day
int Dem_y(int y, int a[], int n){
    int dem=0;
   for(int i=0;i<n;i++)
      if(y==a[i]) dem++;
  return dem;
}

// Tinh ty le % cac so lon hon 5
void PhanTram(int a[],int n){
   float pt;
   int count=0;
   for(int i=0;i<n;i++)
     if(a[i]>=5) count++;
        pt=((float)count/n)*100;
        cout<<"\n + TY LE % CAC SO >= 5 :"<<pt<<"%";
 }

// Dem so lan xuat hien cua so nguyen to trong day
void DemSNT(int a[],int n){
   cout<<"\n + IN RA VI TRI SO NGUYEN TO: ";
   for(int i=0;i<n;i++)
   {
      int test=0;
      for(int t=2;t<a[i];t++)
          if(a[i]%t==0) test=1;
      if (test==0) cout<<i<<" ; ";
    }

}

//////////////////////
void main(){
// Nhap day
  Nhap();
// In day
 InDay(a,n);

// tim x
 int x;
 cout<<"\n Nhap gia tri can tim x= ";
 cin>>x;
 Tim_x(x,a,n);
// Dem y trong day
 int y;
 cout<<"\n Nhap gia tri can dem y= ";
 cin>>y;
 cout<<"\n + SO LAN XUAT HIEN SO "<<y<<" LA: "<<Dem_y(y,a,n);
 // Tinh ty le phan tram cac so >=5
 PhanTram(a,n);

 // Dem so nguyen to trong day
 DemSNT(a,n);

 getch();
}

[C#] Ý nghĩa của ký tự @ trong C#

Ký tự @ có một số ý nghĩa đặc biệt trong một chương trình được viết bằng C#. 

Có hai ý nghĩa cơ bản:

1. Cho phép sử dụng các từ khóa (keyword) trong C# như là tên biến hoặc kiểu dữ liệu
       
      Khi viết một ứng dụng bằng C#, không phải lúc nào chúng ta cũng tự tạo ra một thành phần nào đó để sử dụng mà chúng ta có thể sử dụng các thư viện, lớp có sẵn. Tuy nhiên, các thành phần này có thể đã được viết bằng một ngôn ngữ lập trình khác (như VB, C++…) dẫn đến việt một số tên kiểu dữ liệu trong thành phần đó trùng với từ khóa của C#. Khi đó, chúng ta phải sử dụng ký tự @ để đặt phía trước tên kiểu dữ liệu đó. Ví dụ như chúng ta đang viết một chương trình C# có sử dụng một lớp chứa trong thư viện được viết bằng ngôn ngữ khác, và lớp này có tên là “public”. 
 
      Vậy làm thế nào để sử dụng khai báo được một đối tượng của lớp đó. Cú pháp cần sử dụng của chúng ta sẽ là: 
    @public P = new @public(); 

2. Đặt tên cho biến bằng cách đặt ký hiệu @ phía trước tên biến đó. 

Ví dụ: 
 
       int @new = 10; // @new là một biến kiểu số nguyên

Cho phép một chuỗi thô không có xử lý cho các ký tự phía sau dấu \ bên trong
Giả sử như bạn muốn lưu chuỗi đường dẫn đến thư mục New trong ổ đĩa F thì chuỗi chúng ta cần phải được gán cho biến kiểu string như sau:
       
      String path = “F:\\New”;
Bởi vì các ký tự \ trong một chuỗi có chức năng đặc biệt khi có ký tự đi kèm phía sau nó (ví dụ \n, \t, \r), cho nên chúng ta phải sử dụng hai dấu \\ trong đường dẫn này nhằm báo cho trình biên dịch biết là chúng ta thực sự muốn có ký tự \ trong chuỗi.
Nếu như sử dụng ký tự @, chúng ta không cần phải sử dụng hai ký tự \\ bởi vì trình biên dịch sẽ biết rằng chuỗi này không cần phải xử lý với các ký tự đặc biệt bên trong
string path = @”F:\New”;

Tham khảo chienuit

[Đồ họa máy tính] Code: Vẽ ÔTÔ sử dụng thuật toán Bresenham và Midpoint [C\C++]

Ví dụ: Sử dụng thuật toán Bresenham và Midpoint vẽ các đường tròn và đoạn thẳng

Viết chương trình C\C++ vẽ hình OTO:



[Code Turbo C++]

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<math.h>

/***** VE DUONG THANG ****/

// Ve duong doc (// 0y)

void Line_OY(int y1, int y2, int x,int c){
  for(int y=y1;y<=y2;y++)
   putpixel(x,y,c);
 }

// Ve duong ngang (// 0x)
void Line_OX(int x1, int x2, int y,int c){
for(int x=x1;x<=x2;x++)
   putpixel(x,y,c);
}

// Bresenham_Line
void Bre_Line(int x1, int y1, int x2, int y2, int c)
{
   int x, y, dx, dy,p,const1,const2;
   y = y1;
  dx = x2 - x1;
  dy = y1 - y2;
  p = 2*dy - dx;
  const1 = 2*dy;
  const2 = 2*(dy-dx);
  for (x=x1; x<=x2; x++) {
   putpixel(x, y, c);
   if (p<0)
     p += const1; // p=p + 2dy
   else {
     p +=const2; //p=p+2dy-2dx
     y--;
  }
 }
}

// ve duong than voi Midpoint
void Mid_line(int x1, int y1, int x2, int y2, int c)
{
  int x, y, dx, dy,d;
  y = y1;
  dx = x2 - x1;
  dy = y2 - y1;
  d= dy - dx/2;
  for (x=x1; x<=x2; x++)
  {
    putpixel(x, y, c);
    if (d <= 0)
      d = d + dy;
    else
   {
      y ++;
      d = d + dy - dx;
   }
 }
}

/***** VE DUONG TRON ****/

// ham pc
void pc(int xc,int yc, int x, int y, int c){
 putpixel(xc + x, yc + y, c);
 putpixel(xc - x, yc - y, c);
 putpixel(xc -y, yc +x, c);
 putpixel(xc +y, yc -x, c);
}

// Ve duong tron voi Bresenham
void Bresenham_Circle(int xc, int yc, int r, int c)
{
  int x, y, p;
  x = 0;
  y = r;
  p = 3 - 2 * r;
  pc(xc,yc, r,0,c); //ve 4 diem dac biet
  while (x < y){
   if (p < 0)
     p += 4 * x + 6;
   else{
     p += 4 * (x-y) + 10;
     y--;
   }
   x++;
   pc(xc,yc, x,y,c);
   pc(xc,yc, y,x,c);
 }
 pc(xc,yc, y,y,c); // ve 4 diem phan giac x=y
}

// Ve duong tron voi MidPoint
void Mid_circle(int xc, int yc, int r, int c)
{
  int x, y, d;
  x = 0;
  y = r;
  d = 1- r;
  pc(xc,yc, r,0,c); //ve 4 diem dac biet
  while (x <= y)
  {
    pc(xc,yc, x,y,c);
    pc(xc,yc, y,x,c);
    if (d< 0)
       d +=2 * x + 3;
    else
   {
      d += 2 * (x-y) + 5;
      y--;
   }
   x++;
 }
 pc(xc,yc, y,y,c); // ve 4 diem phan giac x=y
}

/*****************************/
// ham main

void main(){
clrscr();
int driver=DETECT, mode;
initgraph(&driver,&mode,"C:\\TC\\BGI"); // Ban co the thay doi Path tuy vao may cua ban

// AB
Line_OX(10,90,40,4);

// FE
Line_OX(30,70,20,4);

// DC
Line_OX(80,90,30,4);

// AG
Line_OY(30,40,10,4);

// BC
Line_OY(30,40,90,4);

// O1
Bresenham_Circle(30,40, 10,5);

//O2
Mid_circle(60, 40,10, 5);

// Kinh sau (GF)
Bre_Line(10,30,30,20,4) ;

// Kinh truoc (DE)
Mid_line(70,20, 80, 30,4) ;

getch();
}

/***************/
KẾT QUẢ:



[Tải code chương trình tại đây - Lưu ý: sau 5s, click BỎ QUA QUẢNG CÁO (SKIP AD)]

[Java] Xử lý mảng 2 chiều trên Java [Kế thừa trong Java]

Bài tâp: Xây dựng class theo mô hình




[Code Java]

// Class Matran.java
package xuly_matran;
import java.util.Scanner;
public class Matran {
    int [][] a=new int[7][7];
    int n;
 
    // nhap ma tran
    void NhapMT(){
        Scanner t=new Scanner(System.in);
        // nhap kich thuc mang
        System.out.print("\n + Nhap kich thuoc ma tran: \n");
        do{
            System.out.print("\n n= ");
            n=t.nextInt();
            if((n<2||n>7))
                System.out.print("\n Nhap lai n! ");
        }while(n<2||n>7);
        System.out.print("\n + Nhap ma tran: \n");
        for (int i=0;i<n;i++)
            for (int j=0;j<n;j++)
            {
                System.out.print("\n a["+i+"]["+j+"]= ");
                a[i][j]=t.nextInt();
            }
    }
    // In ma tran
    void InMT(){
        System.out.print("\n + In ma tran \n");
        for (int i=0;i<n;i++){
            for (int j=0;j<n;j++)
                System.out.print(a[i][j]+"\t");              
            System.out.print("\n");              
            }
    }
}

// Class SapXep.java
/*
 * Sắp xếp từng dòng của ma trận tăng dân (bubble sort)
 * Sắp xếp từng cột của ma trận giản dần (Insert sort)
 */
package xuly_matran;

public class SapXep extends Matran {
    public SapXep(){
        System.out.print("\n * SAP XEP MA TRAN \n ");
    }
    // sap xep dong tang dan
    void Bubble_sort(){
        System.out.print("\n + In ma tran da sap xep dong tang dan \n");
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                for(int k=n-1;k>j;k--)
                    if(a[i][k]<a[i][k-1])
                    {
                        int temp=a[i][k];
                        a[i][k]=a[i][k-1];
                        a[i][k-1]=temp;
                     
                    }
        super.InMT();
    }
    // sap xep cot giam gan
    void Insert_sort(){
       System.out.print("\n + In ma tran da sap xep cot giam dan \n");
     
       for(int j=0;j<n;j++)
       {
           for(int i=1;i<n;i++)        
           {
           int pos=i-1;
           int t=a[i][j];
           while(pos>=0&&a[pos][j]<t)
           {
               a[pos+1][j]=a[pos][j];
               pos--;
           }
           a[pos+1][j]=t;
           }
       }
       super.InMT();
    }
 
}

// Class Tim_Dem.java
/*
 * Tìm vị trí xuất hiện các số chẵn trong ma trận
 * Đếm số nguyên tố có trong ma trận
 */
package xuly_matran;

public class Tim_Dem extends Matran {
    public Tim_Dem(){
        System.out.print("\n * TIM SO CHAN - DEM SO NGUYEN TO \n");
    }
    // In vi tri so chan trong ma tran
    void InViTRiSoChan(){
        System.out.print("\n + In vi tri so chan trong ma tran:\n");
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if(a[i][j]%2==0) System.out.print("["+i+"]["+j+"]; ");
    }
    // ham kiem tra so nguyen to
    boolean TestNT(int a){
        for(int i=2;i<a;i++)
            if(a%i==0)
                return false;
        return true;
    }
    // Dem so nguyen to trong ma tran
    void DemSoNT(){      
        int dem=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if(TestNT(a[i][j])) dem++;
        System.out.print("\n + So nguyen to co trong ma tran la: "+dem);
    }
}

// Class Tach.java
/*
 * Tách đường chéo chính thành ma trận
 */
package xuly_matran;

public class Tach_DCheo extends Matran{
    int[] m=new int [7];
    public Tach_DCheo(){
        System.out.print("\n * TACH DUONG CHEO CHINH THANH MA TRAN");
    }
    // Tach duong cheo
    void Tach(){
        for(int i=0;i<n;i++)
            m[i]=a[i][i];      
        System.out.print("\n + Mang  vua tach: \n");
        for(int i=0;i<n;i++)
            System.out.print(m[i]+"; ");
    }
    // sap xep tang dan
    void SapXep()
    {
        for(int i=0;i<n;i++)
            for(int j=i+1;j<n;j++)
                if(m[i]>m[j])
                {
                    int t=m[i]; m[i]=m[j]; m[j]=t;
                }
        System.out.print("\n + Sap xep mang \n");
        for(int i=0;i<n;i++)
            System.out.print(m[i]+"; ");
    }
 
}

// Class XuLy_Matran.java (class main)

/*
http://lap-trinh-may-tinh.blogspot.com/
*/
package xuly_matran;

public class Xuly_matran {

    public static void main(String[] args) {
        Matran t=new Matran();
        t.NhapMT();
        t.InMT();
     
        // Sap xep
        SapXep t1=new SapXep();
        t1.NhapMT();
        t1.Bubble_sort();
        t1.Insert_sort();
     
        // Tìm - đếm
        Tim_Dem t2=new Tim_Dem();
        t2.NhapMT();
        t2.InViTRiSoChan();
        t2.DemSoNT();
     
        // Tách đường chéo chính
        Tach_DCheo t3=new Tach_DCheo();
        t3.NhapMT();
        t3.Tach();
        t3.SapXep();
    }
}



Đoc thêm các bài khác

Bài 1: Chương trình JAVA đầu tiên
Bài 2: Các kiểu dữ liệu và toán tử trong
Bài 3: Các cấu trúc điều khiển trong Java
Bài 4 : Mảng và chuỗi trong Java
Bài 5: Lớp (class) và đối tượng (object) trong Java
Bài 6:Thừa kế (Inheritance) và đa hình (Polymorphism)
Ví dụ lập trình giao diện đồ họa với Java (GUI)
Ví dụ lập trình kết nối dữ liệu với Java (JDBC)
Ví dụ về lập trình Android 

Danh mục bài viết