2012-05-18 44 views
6

Tôi cố gắng để chuyển đổi các thuộc tính cho các phần tử con, tức là biến như sau:Chuyển đổi XML Attributes Để Elements XSLT

<WP featured="yes" player="no" dancers="no" series="logos" archive="no" fanart="no" id="eclipse_logos_"> 
    <seriesName>LOGOS</seriesName> 
    <selection>ECLIPSE</selection> 
    <imgurl>http://www.nba.com/warriors/photos/eclipse_logos_</imgurl> 
    <res>1024x1024r(iPad/iPhone)?1280x1024r(Regular)?1440x900r(Widescreen)?1920x1080r(HDTV)?1920x1200r(Widescreen)</res> 
</WP> 

Into:

<WP> 
    <featured>yes</featured> 
    <player>no</player> 
    <dancers>no</dancers> 
    <series>logos</series> 
    <archive>no</archive> 
    <fanart>no></fanart> 
    <id>eclipse_logos_</id> 
    <seriesName>LOGOS</seriesName> 
    <selection>ECLIPSE</selection> 
    <imgurl>http://www.nba.com/warriors/photos/eclipse_logos_</imgurl> 
    <res>1024x1024r(iPad/iPhone)?1280x1024r(Regular)?1440x900r(Widescreen)?1920x1080r(HDTV)?1920x1200r(Widescreen)</res> 
</WP> 
+0

thể trùng lặp của [Chuyển đổi các thuộc tính tất cả của nút vào nút con] (http://stackoverflow.com/questions/4340272/convert-all-nodes-attributes-into-child-nodes) – hakre

Trả lời

10

Hãy thử điều này:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="@*"> 
    <xsl:element name="{name()}"><xsl:value-of select="."/></xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
+0

hi, xin lỗi vì sự chậm trễ trong câu trả lời của tôi. có lẽ tôi đang áp dụng biểu định kiểu xslt của bạn không chính xác bởi vì tất cả những gì tôi nhận được là một trang trống khi tôi mở tệp xml trong trình duyệt của mình. Tôi đã lưu mã của bạn dưới dạng wallpaper.xsl và sau đó đặt ' ' ở đầu tài liệu xml của tôi. điều này có đúng không? – dmack

+0

Bạn đã sử dụng trình duyệt nào? Tôi đã thử nghiệm với Chrome và IE 9, cả cục bộ (dưới dạng tệp cục bộ) và từ xa (trên máy chủ web). Chrome không thích mở tệp cục bộ (nó trống) và bảng điều khiển (CTRL + SHIFT + J) hiển thị thông báo này: 'Không an toàn để tải tệp URL: /// ... từ khung có tệp URL: ///.... Tên miền, giao thức và cổng phải khớp.' Mở từ xa hoạt động trên cả hai. –

+0

Để @ trẻ sơ sinh-programmeraravind của điểm, mặc dù giải pháp này không hoạt động, nó khá rộng. Nếu XML nguồn có bất kỳ thuộc tính nào khác ngoài phần tử '', chúng cũng sẽ được chuyển đổi thành các phần tử. – ABach

3

Mã của dradu là chung chung, việc chuyển đổi sẽ được áp dụng cho tất cả các thuộc tính, bên dưới mã là cụ thể hơn ab phần tử WP: chỉ những thuộc tính sắp tới trong phần tử WP sẽ được chuyển đổi thành phần tử.

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="WP/@*"> 
    <xsl:element name="{name()}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 
Các vấn đề liên quan