2010-02-25 19 views
6

Tôi biết sự khác biệt giữa Sax và Dom là khá quan trọng liên quan đến phân tích cú pháp Xml, nhưng những gì về việc tạo ra những người thân? là có ngay cả một cách để tạo mới Xml bằng cách sử dụng Sax hoặc rằng nếu tôi muốn tạo tập tin Xml mới dựa trên dữ liệu của tôi trong chương trình của tôi, tôi sẽ phải sử dụng DOM?Dom Vs Sax - tạo Xmls

Cảm ơn

Trả lời

7

SAX là, trích wikipedia:

SAX (API đơn giản cho XML) là một sê-ri truy cập phân tích cú pháp API cho XML.
SAX cung cấp cơ chế cho đọc dữ liệu từ tài liệu XML.

tức là SAX có thể tuyệt vời để đọc tài liệu XML, nhưng nếu bạn muốn viết một tài liệu XML, có thể bạn sẽ sử dụng DOM.

+1

cách đơn giản nhất có thể để tạo ra XML là để làm byte/chuỗi mức concatnation .. tại sao mọi người muốn sử dụng phân tích API để tạo các tài liệu? –

+7

Làm nối chuỗi, bạn sẽ phải đối phó với thoát khỏi chính mình (bao gồm CDATA, ví dụ, mà nhiều người quên); đó là một lý do chính đáng để sử dụng một API ;; Ngoài ra, DOM là (khá) tiêu chuẩn hóa các ngôn ngữ accros, đó là một điều tốt, mà sẽ giúp làm cho bạn mã dễ hiểu hơn ;; Và tôi đã thấy quá nhiều mã "kiểu nối" crappy được sử dụng để tạo XML ... –

1

DOM là lựa chọn tự nhiên để tạo tài liệu.

2
  • DOM được sử dụng khi dữ liệu của bạn phù hợp với bộ nhớ với API convienent.
  • Với SAX bạn có thể ghi một lượng lớn dữ liệu, SAX cũng cung cấp hiệu suất cao hơn.

Bạn cũng có thể interessted trong What are the differences between SAX and DOM parser

DOM and SAX Put to the Test

+0

Ngoài ra, có hai giá trị đáng chú ý hơn: * Kéo hoặc StaX * VTD-XML –

+0

bạn cần đăng nhập, trong để đọc liên kết "DOM và SAX đưa vào thử nghiệm", điều này rất tệ .. – iddober

1

Tôi chưa thấy API viết SAX-phong cách, nó chỉ dành cho đọc. Để viết các tùy chọn của bạn là DOM và các API trình xây dựng không chuẩn hóa khác nhau (thường dễ sử dụng hơn DOM). Các API không được chuẩn hóa khác với ngôn ngữ/thư viện với ngôn ngữ khác, nhưng xem ví dụ: Builder for Ruby. Tôi cũng đã soạn thảo API tương tự cho C++ với quá tải toán tử: (ví dụ chỉ là thử nghiệm một API có thể, nó không thực sự làm gì cả)

#include <string> 

struct XMLBuilder { 
    XMLBuilder& operator[](std::string const& elemName) { return *this; } 
    XMLBuilder& operator()(std::string const& attrName, std::string const& attrValue) { return *this; } 
    XMLBuilder& operator()(std::string const& innerText) { return *this; } 
    XMLBuilder& operator()(XMLBuilder const& innerDoc) { return *this; } 
}; 

int main() { 
    XMLBuilder() 
    ["contact"](XMLBuilder() 
     ["name"]("Patrick Hines") 
     ["phone"]("type", "home")("206-555-0144") 
     ["phone"]("type", "work")("425-555-0145") 
     ["address"](XMLBuilder() 
     ["street"]("...") 
     ["zip"]("12345") 
    ) 
    ) 
    ; 
} 
2

SAX là để đọc tài liệu XML chứ không phải viết chúng.

DOM ở phía bên kia được thiết kế để tạo ánh xạ giữa cấu trúc trong bộ nhớ và tài liệu XML.

Nếu bạn đã có cấu trúc dữ liệu của riêng mình cho dữ liệu trong bộ nhớ (thuận tiện hơn nhiều so với cấu trúc DOM cho xử lý của bạn), việc tạo cấu trúc dữ liệu DOM sẽ đồng nghĩa với dữ liệu của bạn. Có lẽ đó không phải là những gì bạn muốn nếu bạn có dữ liệu lớn. Ngoài ra, bạn sẽ phải tạo cấu trúc DOM hoàn toàn trước khi bạn có thể viết nó vào XML, tăng gấp đôi kích thước bộ nhớ cần thiết cho ứng dụng của bạn. Hơn nữa nó sẽ tạo ra độ trễ trong quá trình xử lý của bạn.

Tôi không biết về một thư viện có thể giúp viết một tài liệu XML, nhưng nếu tôi đã sử dụng SAX, có cấu trúc dữ liệu của riêng tôi, tôi sẽ không bận tâm với DOM.

1

Thỉnh thoảng tôi sẽ chỉ sử dụng printf để tạo các XML đơn giản, nhưng thường là đáng để sử dụng một công cụ liên kết XML như ví dụ: Code Synthesis XSD. Điều đó sẽ tạo ra một hệ thống phân cấp lớp cho bạn, dựa trên một XSD. Bạn chỉ điền một hệ thống phân cấp đối tượng, và nó sẽ tạo ra XML cho bạn.

Bằng cách đó, bạn nhận được kiểm tra tĩnh rằng XML của bạn sẽ được định dạng tốt và hợp lệ, điều này thực sự giúp đưa ra các lỗi sớm.

Nếu bạn đã từng sử dụng JAXB hoặc bất kỳ công cụ tương tự nào cho Java, thì điều này cũng khá giống nhau.

0

Bạn có thể thử tìm kiếm tương đương với số XmlWriter của .NET bằng ngôn ngữ/nền tảng của bạn.

0

Luôn luôn sử dụng DOM để tạo XML mới ... Đối với mục đích đọc thích SAX ..

Các vấn đề liên quan