使用 XSLT 的 XML 到 XML,根据值省略特定元素

2024-04-24

我正在尝试生成一个与初始文件几乎相同的 xml 文件,但我需要我的 xsl 表将其转换为仅包含 为“公寓”或“单元”且具有值的文件 中超过 1 个我完全迷失了,任何帮助将不胜感激!

我最初的 xml 表如下:

<rentalProperties> 
<property available="yes" contact="0423020892"> 
    <type>house</type> 
    <price>800</price> 
    <address> 
        <streetNo>116</streetNo> 
        <street>Warrigal Road</street> 
        <suburb>Camberwell</suburb> 
        <state>VIC</state> 
    <zipcode>3124</zipcode>
    </address> 
    <numberOfBedrooms>4</numberOfBedrooms> 
    <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
</property>
</rentalproperties>

My xsl:

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
<xsl:element name="RentalProperties">
   <xsl:apply-templates select="rentalProperties/property"/>
</xsl:element>
</xsl:template>

<xsl:template match="rentalProperties/property/type">
<xsl:element name="type" >
  <xsl:value-of select="."/>
</xsl:element>
</xsl:template>

<xsl:template match="rentalProperties/property/price">
<xsl:element name="price" >
  <xsl:value-of select="."/>
</xsl:element>
</xsl:template>

<xsl:template match="rentalProperties/property/address">
<xsl:element name="address" >
  <xsl:value-of select="streetNo"/><xsl:value-of select="street"/><xsl:value-of select="suburb"/><xsl:value-of select="state"/><xsl:value-of select="zipcode"/>
</xsl:element>
</xsl:template>

<xsl:template match="rentalProperties/property/numberOfBedrooms">
<xsl:element name="numberOfBedrooms" >
  <xsl:value-of select="."/>
</xsl:element>
</xsl:template>

<xsl:template match="rentalProperties/property/description">
<xsl:element name="description" >
  <xsl:value-of select="."/>
</xsl:element>
</xsl:template>

输出将类似于:

<RentalProperties>
<property>
<type>apartment</type>
<price>400</price>
<address>4/3,Acheron Avenue,Camberwell,VIC,3124, Australia</address>
<numberOfBedrooms>2</numberOfBedrooms>
<description>This two bedroom apartment is located in quiet tree lined street, just minutes from tram and easy walk to Camberwell Junction and train. Positioned on the 1st floor with sunny north facing lounge and balcony.
</description>
</property>
</RentalProperties>

Thanks


这可能是最简单的解决方案之一(根本没有显式条件,所有输出仅由身份模板生成):

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

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

 <xsl:template match=
 "property
   [not(contains('|unit|apartment|',
                 concat('|',type,'|')
                 )
        )
    or
     not(numberOfBedrooms > 1)
   ]
 "/>
</xsl:stylesheet>

当应用于此 XML 文档时(提供的 - 更正和放大):

<rentalProperties>
<property available="yes" contact="0423020892">
    <type>house</type>
    <price>800</price>
    <address>
        <streetNo>116</streetNo>
        <street>Warrigal Road</street>
        <suburb>Camberwell</suburb>
        <state>VIC</state>
    <zipcode>3124</zipcode>
    </address>
    <numberOfBedrooms>4</numberOfBedrooms>
    <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
</property>
<property available="yes" contact="0423020899">
    <type>apartment</type>
    <price>500</price>
    <address>
        <streetNo>116</streetNo>
        <street>Water St.</street>
        <suburb>Hornsby</suburb>
        <state>NSW</state>
    <zipcode>2012</zipcode>
    </address>
    <numberOfBedrooms>2</numberOfBedrooms>
    <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
</property>
<property available="yes" contact="0423011111">
    <type>unit</type>
    <price>800</price>
    <address>
        <streetNo>7</streetNo>
        <street>Ryan St</street>
        <suburb>Isacs</suburb>
        <state>ACT</state>
    <zipcode>2603</zipcode>
    </address>
    <numberOfBedrooms>1</numberOfBedrooms>
    <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
</property>
<property available="yes" contact="04231234567">
    <type>hotel</type>
    <price>1200</price>
    <address>
        <streetNo>4</streetNo>
        <street>Bench St.</street>
        <suburb>Deakin</suburb>
        <state>ACT</state>
    <zipcode>2600</zipcode>
    </address>
    <numberOfBedrooms>4</numberOfBedrooms>
    <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
</property>
</rentalProperties>

产生想要的正确结果(只输出满足所有约束的属性之一):

<rentalProperties>
   <property available="yes" contact="0423020899">
      <type>apartment</type>
      <price>500</price>
      <address>
         <streetNo>116</streetNo>
         <street>Water St.</street>
         <suburb>Hornsby</suburb>
         <state>NSW</state>
         <zipcode>2012</zipcode>
      </address>
      <numberOfBedrooms>2</numberOfBedrooms>
      <description>Ideal for the familly is this charming Californian Bungalow. Comprising a spacious living area, formal dining room plus a huge family/meals area, bright modern well appointed kitchen with dishwasher, gas cooktop and electric oven and heaps of bench space, Four double bedrooms, two in a wing of their own, are served by a stylishly renovated central bathroom and second sky-lit bathroom to the rear.</description>
   </property>
</rentalProperties>

解释: 覆盖身份规则 http://www.dpawson.co.uk/xsl/sect2/identity.html使用与任何不需要的属性匹配的空模板。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XSLT 的 XML 到 XML,根据值省略特定元素 的相关文章

随机推荐