2012-02-24 25 views

Trả lời

6

Sử dụng processing-instruction() kiểm tra nút.

+1

Kirill, câu trả lời này quá chung chung - bạn không cung cấp biểu thức XPath cụ thể chọn chính xác PI mong muốn. –

5

Nói chung, có thể chọn hướng dẫn xử lý bằng cách sử dụng kiểm tra nút processing-instruction().

Cụ thể hơn, người ta có thể bao gồm làm đối số tên (đích) của nút PI mong muốn.

Sử dụng:

/processing-instruction('xml-stylesheet') 

này sẽ chọn bất kỳ hướng dẫn xử lý với tên xsl-stylesheet được định nghĩa ở cấp toàn cầu (là anh chị em ruột của các yếu tố đầu).

Lưu ý rằng xsl:stylesheet là mục tiêu PI không hợp lệ cho PI. Dấu hai chấm ':' được sử dụng để phân tách tiền tố không gian tên từ tên địa phương - tuy nhiên hướng dẫn xử lý đích không thể thuộc về không gian tên. Theo W3c XPath Specification:

"Một hướng dẫn xử lý có một mở rộng tên tuổi: phần địa phương là mục tiêu hướng dẫn xử lý của; namespace URI là null."

Cũng theo tài liệu của W3C: "Associating Style Sheets with XML documents 1.0", mục tiêu của PI liên kết một stylesheet để một tài liệu XML phải là:. "xml-stylesheet" - không "xsl:stylesheet" hoặc "xsl-stylesheet"

Đây là một ví dụ hoàn chỉnh:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="/processing-instruction('xml-stylesheet')"/> 
</xsl:template> 
</xsl:stylesheet> 

Khi chuyển đổi này được áp dụng đối với các tài liệu XML sau:

<?xml-stylesheet type="text/xsl" href="test"?> 
<Books> 
    <Book name="MyBook" /> 
</Books> 

biểu thức XPath được đánh giá và nút PI chọn là sản lượng:

<?xml-stylesheet type="text/xsl" href="test"?> 
+11

Tôi thấy bạn vẫn theo các thủ thuật cũ của bạn ... Xóa và đăng lại câu trả lời để hủy bỏ phiếu bầu là lạm dụng trực tiếp: cách mọi người quyết định xếp hạng câu trả lời của bạn là quyết định của họ chứ không phải của bạn. Vui lòng không làm điều này một lần nữa. – Shog9

+0

Có '/ xử lý-hướng dẫn ('xml-stylesheet')' chọn những thứ có tên 'xsl-stylesheet'? Đó sẽ là ma thuật! Lưu ý 'xml' so với' xsl'. –

+0

@MicheldeRuiter, Vâng, đúng vậy. Đây là chính thức được định nghĩa ở đây (đoạn thứ ba từ phía dưới): http://www.w3.org/TR/xpath/#node-tests –

0

Một hat xử lý-hướng dẫn hai phần nhắm mục tiêu và dữ liệu với cú pháp:

<?target data?> 

Nếu bạn sử dụng:

<xsl:value-of select="/processing-instruction('xml-stylesheet')" /> 

Nó sẽ chỉ trả lại một phần dữ liệu, trong ví dụ của Dimitre Novatchev, nó sẽ trả về:

type="text/xsl" href="test" 

Vì vậy, chuỗi giá trị của một hướng dẫn xử lý là phần dữ liệu. biểu thức chọn của <xsl:value-of được đánh giá và đối tượng kết quả được chuyển đổi thành một chuỗi, giống như một cuộc gọi ngầm đến hàm string().

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