2010-08-09 34 views
5

Tôi có một tài liệu XML, nơi một số các nút có một . trong tên của họ:XPath chọn nút với thời gian

<com.site.blah> 
    <id>asdkjasd</id> 
    <com.site.testing> 
     <name>test</name> 
    </com.site.testing> 
</com.site.blah> 

Nếu tôi cố gắng @doc.search("/*/id").first.xpath, nó sẽ trả /com.site.blah/id, nhưng nếu tôi sau đó làm: @doc.search("/com.site.blah/id").first.inspect nó trả về nil.

Tôi muốn có thể thực hiện truy vấn XPath để chọn tên dưới com.site.testing, nhưng nó vẫn từ chối truy vấn của tôi.

Bất kỳ ý tưởng nào?

(Tôi đang sử dụng hpricot nếu nó tạo sự khác biệt)

+1

Các bạn đã cố gắng thoát ra những dấu chấm trong một truy vấn? –

+0

@Nikita - Có, tôi đã thử 'com \ .site \ .blah' và điều đó không hoạt động –

+0

Tại sao bạn không thử' com.site.blah'? (http://codepad.org/ecVVUPCu) – Tomalak

Trả lời

2

Thư viện XPath của bạn bị hỏng. Kiểm tra tên XPath là một QName (http://www.w3.org/TR/xpath/#NT-NameTest), trong đó, sau khi đi theo lỗ thỏ của EBNF, bao gồm các dấu chấm (http://www.w3.org/TR/REC-xml/#NT-NameChar). Báo cáo lỗi cho nhà phát triển.

Là một workaround, không ai trong số các cơ chế thoát đề cập trong các ý kiến ​​là một phần của XPath, nhưng bạn có thể thử sử dụng một vị để kiểm tra tên phần tử, như vậy:

/*[name(.) = 'com.site.blah']/id 
Các vấn đề liên quan