我正在尝试从第三方来源获取XML提要,并将其扁平化。
当前的XML提要如下所示:
<properties>
<property>
<idnumber></idnumber>
<location>
<region></region>
<street-address></street-address>
<city-name></city-name>
<state-code></state-code>
<zipcode></zipcode>
<latitude></latitude>
<longitude></longitude>
</location>
<details>
<name></name>
<status></status>
<price></price>
<bedrooms></num-bedrooms>
<bathrooms></bathrooms>
<lot-size></lot-size>
<square-feet></square-feet>
<property-type></property-type>
<attributes></attributes>
<description></description>
</details>
<pictures>
<picture>
<picture-url></picture-url>
</picture>
</property>
</properties>但是,我真的需要将XML扁平化为:
<properties>
<property>
<idnumber></idnumber>
<region></region>
<street-address></street-address>
<city-name></city-name>
<state-code></state-code>
<zipcode></zipcode>
<latitude></latitude>
<longitude></longitude>
<name></name>
<status></status>
<price></price>
<bedrooms></num-bedrooms>
<bathrooms></bathrooms>
<lot-size></lot-size>
<square-feet></square-feet>
<property-type></property-type>
<attributes></attributes>
<description></description>
<picture>
<picture-url></picture-url>
</picture>
</property>
</properties>我一直在阅读XLST样式表来尝试这一点,然而,我只是在浪费我的时间,因为原始提要托管在第三方,我不能在其中编辑?
发布于 2012-03-08 11:04:50
这会做你想做的事。身份模板会将所有内容复制到输出中,而其他三个模板会导致忽略第二级标记,同时仍会复制其内容。
<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/location">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="property/details">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="property/pictures">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>发布于 2012-03-08 11:02:55
此转换
<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="/*/*/*[*]">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>在提供的XML文档上应用时(更正为格式良好):
<properties>
<property>
<idnumber></idnumber>
<location>
<region></region>
<street-address></street-address>
<city-name></city-name>
<state-code></state-code>
<zipcode></zipcode>
<latitude></latitude>
<longitude></longitude>
</location>
<details>
<name></name>
<status></status>
<price></price>
<bedrooms></bedrooms>
<bathrooms></bathrooms>
<lot-size></lot-size>
<square-feet></square-feet>
<property-type></property-type>
<attributes></attributes>
<description></description>
</details>
<pictures>
<picture>
<picture-url></picture-url>
</picture>
</pictures>
</property>
</properties>生成所需的、正确的输出
<properties>
<property>
<idnumber/>
<region/>
<street-address/>
<city-name/>
<state-code/>
<zipcode/>
<latitude/>
<longitude/>
<name/>
<status/>
<price/>
<bedrooms/>
<bathrooms/>
<lot-size/>
<square-feet/>
<property-type/>
<attributes/>
<description/>
<picture>
<picture-url/>
</picture>
</property>
</properties>解释:正确使用和覆盖。
https://stackoverflow.com/questions/9609846
复制相似问题