2013-08-08 24 views
5

Với đầu vào nàyLàm thế nào để chỉ nhận được văn bản đơn giản và ngắt dòng sử dụng XSL

<?xml version="1.0" encoding="UTF-8"?> <data> 
This is a senstence 
this is another sentence 

<section> 
     <!--comment --><h2>my H2</h2>  <p>some paragraph</p>    <p>another paragraph</p>     
    </section> </data> 

Tôi cần phải áp dụng style sheet XSL để có được chỉ là văn bản đơn giản, tôn vinh các ngắt dòng và loại bỏ preceeding khoảng trắng. Vì vậy, sau khi tìm kiếm trực tuyến một vài mẫu, tôi đã thử điều này, nhưng nó không hiệu quả với tôi. Xin lỗi, Im không quen thuộc với XSL và nghĩ rằng tôi sẽ hỏi.

XSL đã thử, nhưng nó không hoạt động. Ý tưởng nào?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:strip-space elements="*" /> 

     <xsl:template match ="@* | node()"> 
      <xsl:copy> 
       <xsl:apply-templates select="@* | node()"/> 
      </xsl:copy>  
     </xsl:template> 

     <xsl:template match="h1|h2"> 
      <xsl:text> 
      </xsl:text> 
      <xsl:copy> 
       <xsl:apply-templates select="@* | node()"/> 
      </xsl:copy> 
     </xsl:template> 
</xsl:stylesheet> 

Đây là đầu ra sau khi áp dụng XSL. Như bạn có thể thấy, tất cả một dòng, không phải trả về vận chuyển.

This is a sentence this is another sentence m H2some paragraphTanother paragraph 

Đây là sản phẩm tôi muốn nhận. Văn bản trong H1 | H2 | H3 phải có ngắt dòng trước và sau.

This is a sentence 
this is another sentence 

my H2 

some paragraph 
another paragraph 
+0

"Không hoạt động" nghĩa là gì? Nó có hiển thị thông báo lỗi không? Liệu nó có làm điều gì đó bạn không muốn nó làm? Nó có phun ra một người lùn không? – ApplePie

+0

Xem xét để đăng đầu ra văn bản thuần túy mà bạn muốn cho mẫu đầu vào XML mà bạn đã đăng. –

+0

Cảm ơn! Tôi có nghĩa là để bao gồm những người là tốt. –

Trả lời

4

Bạn cần một thuộc tính xml:space="preserve" để duy trì vận chuyển trở lại trong vòng xml:text, và bạn cần một trở về vận chuyển trước và sau khi nội dung của h1h2 tags:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding="UTF-8"/> 
    <xsl:strip-space elements="*" /> 

    <xsl:template match ="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="h1|h2"> 
    <xsl:text xml:space="preserve"> 
</xsl:text> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    <xsl:text xml:space="preserve"> 
</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

Các văn bản ban đầu (This is a senstence, this is another sentence) được xuất chính xác trên các dòng riêng biệt trong trường hợp của tôi (sử dụng Visual Studio 2012 để thực thi XSLT).

Bạn viết rằng chỉ h thẻ nên có sự trở lại vận chuyển thêm - trong mẫu của bạn some paragraphanother paragraph là trong p thẻ, vì vậy không xuống dòng được thêm vào và họ là đầu ra trên cùng một dòng.

+1

'' tự động giữ khoảng trống, bạn không cần 'xml: khoảng trống' trên đó. Nhưng nói chung, tôi thích sử dụng ' ' để chèn dòng mới, điều đó có nghĩa là tôi có thể thụt lề lại tệp XSLT một cách an toàn mà không thay đổi ngữ nghĩa. –

+0

@IanRoberts: phụ thuộc vào cách bạn tải/thực hiện XSLT - nó là không gian trắng không quan trọng và do đó nó (có thể) bị tước nếu 'xml: space =" preserve "' không có ở đó – MiMo

+0

[The spec] (http: //www.w3.org/TR/xslt#strip) nói rằng ' 'nên luôn giữ gìn không gian. Nếu không thì đó là lỗi trong bộ xử lý. Mặc dù vậy, bạn có một điểm, có thể có vấn đề nếu bộ xử lý không kiểm soát quá trình phân tích cú pháp XSLT (ví dụ: nếu một thành phần khác phân tích tệp .xsl thành cây DOM có dấu cách, sau đó đưa DOM vào bộ xử lý XSLT). –

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