我正在尝试生成一个与初始文件几乎完全相同的xml文件,但我需要将我的xsl表转换为仅包含带有<类型>无论是“公寓”还是“单位”,其价值都大于1。 numberofBedrooms>我完全失去了,任何帮助将不胜感激!
我的初始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>
我的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>
由于
答案 0 :(得分:3)
这可能是最简单的解决方案之一(根本没有明确的条件,所有输出都只由身份模板生成):
<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>
解释:使用匹配任何不需要的属性的空模板覆盖 identity rule 。
答案 1 :(得分:0)
<?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="property">
<xsl:if test="normalize-space(./type/text()) = 'unit' or normalize-space(./type/text()) = 'apartment'">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
上面的xml将所有内容复制到输出,但在“property”元素的情况下,只有在类型包含文本单元或单元时才复制它。我希望我给你一个提示..