2012-03-07 5 views
2

私はサードパーティソースからXMLフィードを取得し、それを平坦化しようとしています。サードパーティの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スタイルシートの上にまで読んできましたしかし、元のフィードは私が編集できない第三者でホストされているので、私は時間を無駄にしていますか?

答えて

1

これは、あなたが望むことをします。アイデンティティテンプレートはすべてを出力にコピーしますが、残りの3つのテンプレートは、コンテンツをコピーしながら第2レベルのタグを省略します。

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

この変換

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

説明:適切な使用およびオーバーライドthe identity rule

+0

」が見つからない –

+0

@JimGarrison:良好な観測値が修正されました。 :) –

関連する問題