2009-02-25 36 views
8

Tôi có tập tin XML này:Giải nén một tập hợp con của tập tin XML sử dụng XSL

<Response> 
    <errorCode>error Code</errorCode> 
    <errorMessage>msg</errorMessage> 
    <ResponseParameters> 
     <className> 
      <attribute1>a</attribute1> 
      <attribute2>b</attribute2> 
     </className> 
    </ResponseParameters> 
</Response> 

Và tôi muốn đầu ra là:

<className> 
    <attribute1>a</attribute1> 
    <attribute2>b</attribute2> 
</className> 

tập tin XSL hiện tại của tôi là bao gồm cũng "ResponseParameters" tag mà tôi không muốn.

EDIT: lưu ý rằng tên lớp node là động. Tôi không biết tên này sẽ là gì khi chạy.

<?xml version="1.0"?> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output indent="yes" /> 

    <xsl:template match="/"> 
     <xsl:copy-of select="//ResponseParameters"> 
     </xsl:copy-of> 
    </xsl:template> 
</xsl:stylesheet> 

Trả lời

12

Sử dụng:

<xsl:copy-of select="/Response/ResponseParameters/node()"/> 

Các "//" viết tắt là rất tốn kém (gây ra các tài liệu XML hoàn chỉnh được quét), và nên tránh.

0

Một cách là phải vượt qua một tham số chứa tên nút vào XSLT và sử dụng các tham số được truyền với tên() chức năng để phù hợp với nút năng động.

Edit:

Nhưng trong trường hợp đơn giản này một trong các câu trả lời khác cho thấy ResponseParameters // * hoặc ResponseParameters/* là một giải pháp đơn giản hơn nhiều.

0
<xsl:copy-of select="Response/ResponseParameters//*"/> 
Các vấn đề liên quan