2012-08-04 58 views
2

誰能告訴我如何刪除所有的子元素,並將它們在父節點用逗號分隔的線,也徹底消除圖像的thumbURltitle元素我已經要做這個文件的轉型,這是XS:過濾和刪除元素值從子到父節點XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()" /> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="propertyURL/text()"> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="."/> 
     <xsl:with-param name="replace" select="'?ref=0'"/> 
     <xsl:with-param name="by"  select="'?ref=1000'"/> 
    </xsl:call-template> 
    </xsl:template> 
    <xsl:template name="string-replace-all"> 
    <xsl:param name="text"/> 
    <xsl:param name="replace"/> 
    <xsl:param name="by"/> 
    <xsl:choose> 
     <xsl:when test="contains($text, $replace)"> 
     <xsl:value-of select="substring-before($text,$replace)"/> 
     <xsl:value-of select="$by"/> 
     <xsl:call-template name="string-replace-all"> 
      <xsl:with-param name="text" select="substring-after($text,$replace)"/> 
      <xsl:with-param name="replace" select="$replace"/> 
      <xsl:with-param name="by" select="$by"/> 
     </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

這是數據我需要modifiy貌似

<p id="1"> 
    <amenities> 
    <amenity>Air conditioning</amenity> 
    <amenity>Lift/elevator</amenity> 
    <amenity>Pets accepted</amenity> 
    <amenity>Guarded car park</amenity> 
    <amenity>Private parking</amenity> 
    <amenity>Garage</amenity> 
    <amenity>Limousine service</amenity> 
    </amenities> 
    <images> 
    <image num="1"> 
    <imageURL>path/to/image.url1</imageURL> 
    <thumbURL>..</thumbURL> 
    <title>..</title> 
    </image> 
    <image num="2"> 
    <imageURL>path/to/image.url2</imageURL> 
    <thumbURL>..</thumbURL> 
    <title>..</title> 
    </image> 
    </images> 
    </p> 

這就是我需要的數據做什麼:

<p> 
<amenities> 
    Air conditioning,Lift/elevator,Pets accepted,Guarded car park,.... 
</amenities> 
<images> 
    <imageURL>path/to/image.url1</imageURL> 
    <imageURL>path/to/image.url2</imageURL> 
</images> 
</p> 

回答

1

如何這樣的事情...

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="amenity"> 
     <xsl:value-of select="."/> 
     <xsl:if test="following-sibling::amenity">,</xsl:if> 
    </xsl:template> 

    <xsl:template match="image"> 
     <xsl:apply-templates select="imageURL"/> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

<p> 
    <amenities>Air conditioning,Lift/elevator,Pets accepted,Guarded car park,Private parking,Garage,Limousine service</amenities> 
    <images> 
     <imageURL>path/to/image.url1</imageURL> 
     <imageURL>path/to/image.url2</imageURL> 
    </images> 
</p>