过滤并从子节点xslt中删除元素值

时间:2012-08-04 20:40:50

标签: xml xslt-1.0 xslcompiledtransform

有人可以告诉我如何删除所有子元素并将它们放在父节点中以逗号分隔的行中,同时完全删除thumbURltitle图像元素我已经不得不这样做了这个文件的转换,这是xs:

<?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>

这就是我需要修改的数据

 <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 个答案:

答案 0 :(得分: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>