2008-10-10 72 views
5

Tôi đang tạo một công cụ sẽ kiểm tra XHTML được tạo động và xác thực nó dựa trên nội dung dự kiến.bộ chọn css phía máy chủ

Tôi cần xác nhận cấu trúc là chính xác và thuộc tính cụ thể tồn tại/khớp. Có thể có các thuộc tính khác mà tôi không quan tâm, vì vậy so sánh chuỗi trực tiếp không phù hợp. Một cách để xác thực điều này là với XPath, và tôi đã thực hiện điều này, nhưng tôi cũng muốn một cái gì đó ít tiết - Tôi muốn có thể sử dụng CSS Selectors, giống như tôi có thể với jQuery, nhưng trên máy chủ - trong mã CFML - trái ngược với trên máy khách.

Có thư viện CFML hoặc Java cho phép tôi sử dụng Bộ chọn CSS dựa vào chuỗi XHTML không?

Trả lời

7

Tôi vừa phát hành một dự án mã nguồn mở là một trình thực hiện CSS Selectors Cấp 3 của W3C trong Java. Vui lòng thử. Tôi đang tìm kiếm điều tương tự và quyết định triển khai động cơ của riêng mình. Nó lấy cảm hứng từ mã trong WebKit, v.v.

http://github.com/chrsan/css-selectors/tree

+0

Cảm ơn Christer. Tôi chưa có cơ hội quay lại dự án mà tôi cần, nhưng dường như điều tôi muốn - tôi sẽ xem xét một số điểm trong tuần này, và cung cấp cho bạn bất kỳ phản hồi nào tôi có thể có. –

+0

Điều này trông rất đẹp! Tôi có thể xem xét tích hợp thư viện của bạn trong [jOOX] (http://code.google.com/p/joox/) –

2

Tôi không biết thư viện Java, nhưng có một thư viện Ruby có tên là Hpricot thực hiện chính xác những gì bạn đang tìm kiếm. Cùng với việc triển khai Ruby trên nền tảng Java, JRuby, cần tương đối đơn giản để gọi các phương thức Ruby từ mã Java của bạn (sử dụng BSF, JSR-222 Scripting APIs hoặc an internal API).

Bạn đang sử dụng Coldfusion 8? Coldfusion 8, dựa trên Java 6, hỗ trợ JSR-222 Scripting APIs "javax.scripting".

Hãy xem this blog entry on embedding PHP within CFML. Bạn có thể làm giống với Ruby. Có mã ví dụ về tệp ZIP được liên kết từ bài đăng trên blog này và nếu bạn mở CFML, bạn sẽ thấy một ví dụ tốt về nhúng Ruby trong CFML.

Mặc dù có thể mất một chút công sức để làm cho tất cả các phần hoạt động cùng nhau, nhưng với một chút đầu tư, nó sẽ cung cấp cho bạn truy vấn chọn phân tích cú pháp/CSS mạnh mẽ mà bạn đang tìm kiếm.

0

Có sự khác biệt về mặt lý thuyết giữa máy chủ và ứng dụng khách. Đối với trình duyệt web, tài liệu là phân cấp DOM sống. Để mã máy chủ của bạn chỉ đơn thuần là một tài liệu XML thuộc bất kỳ loại nào. XPath là cách "đúng" để truy cập các phần tử của một tài liệu XML.

Vì vậy, trừ khi bạn gặp sự cố nghiêm trọng về hiệu suất với giải pháp XPath hiện tại của mình hoặc giải pháp này không thực sự hoạt động chính xác, tôi khuyên bạn nên gắn bó với nó. Thử một cái gì đó quá thông minh sẽ mang đến nguy cơ phá vỡ một cái gì đó đang hoạt động.

Nếu bạn thấy XPath là quá tiết kiệm và xấu xí để rời khỏi, hoặc muốn có thêm sức mạnh để sử dụng lại công cụ trong các trường hợp khác nhau hoặc không thể chống lại việc cố gắng làm điều gì đó thông minh, thì bạn có thể thử viết một tiện ích để biên dịch một bộ chọn CSS đã cho thành XPath. Sau đó bạn có thể gọi điều này trong một dòng bất cứ khi nào bạn cần.

+0

xml! = Html. bạn không thể phân tích cú pháp html với xpath – Shawn

+0

XHTML, nếu nó hợp lệ, là một tập con của XML. Câu hỏi rõ ràng cho biết đó là XHTML mà họ đã tạo ra. –

+0

@Shawn Tôi phân tích cú pháp HTML với XPath mọi lúc, sử dụng thư viện tạo DOM. Bạn có thể cung cấp ví dụ về HTML hợp lệ không thể phân tích cú pháp không? –

2

Hpricot chắc chắn là một giải pháp tuyệt vời nếu tuyến đường JRuby mở cửa cho bạn.

Wrt. XPath là cách "đúng" để truy cập các tài liệu XML ... xin lỗi nhưng đây là rác rưởi. Có rất nhiều cách để truy cập các phần tử của một tài liệu XML: DOM traversal, XPath, XQuery, các bộ chọn CSS để đặt tên một vài. XPath chắc chắn là phổ biến nhưng bộ chọn CSS rất mạnh mẽ, giả sử tài liệu XML của bạn có ngữ nghĩa HTML.

+0

rắc rối là hpricot được dựa trên một trình phân tích cú pháp gốc, không chắc chắn nó dễ dàng như thế nào để làm cho nó chạy trong jRuby. –

+0

Hpricot chạy tốt bên trong JRuby khi các tác giả đã xây dựng một triển khai Java của trình phân tích cú pháp gốc. – Ijonas

2

Nếu bạn có thể sử dụng PHP trong CFML của bạn (như đã đề cập ở trên), bạn có thể tận dụng lợi thế của thư viện này xuất sắc "jQuery cho PHP", phpQuery

Full CSS chức năng hỗ trợ chọn, thao tác, đi qua, v.v. Nó sẽ hoạt động tốt cho những gì bạn cần.

Hy vọng điều đó sẽ hữu ích.

0

có thể dễ dàng hơn khi sử dụng cQuery.com - cQuery.com là một API dựa trên 'Công cụ truy vấn nội dung' để trích xuất nội dung từ các trang web trực tiếp bằng cách sử dụng CSS.

Bạn có thể sử dụng nó theo chương trình trong ứng dụng của bạn.

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