2

XSLT 1 を使用して階層/構造を XML にフラット化しようとしていますが、成功していません。- 良いリンクを見つけても...

入力xml


<Address addressType="R">
 <Structured xmlns="cds_dt">
  <Line1>15 Paradise</Line1>
  <City>Toronto</City>
  <CountrySubdivisionCode>-50</CountrySubdivisionCode>
  <PostalZipCode>
    <PostalCode>A1A1O1</PostalCode>
  </PostalZipCode>
 </Structured>
</Address>

必要な出力 xml


<Address addressType="R">
  <Formatted xmlns="cds_dt">15 Paradise, Toronto, A1A1O1</Formatted>
</Address>

この .xsl を試しましたが、うまくいきませんでした - ファイルにエラーがあります


<xsl:stylesheet version="1.0" 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 xmlns:x="cds"> 

<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="*[ancestor::address]">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="text()[ancestor::address::Structured]">
  <xsl:value-of select="concat('&#44;',.)"/>
</xsl:template>

</xsl:stylesheet> 
4

2 に答える 2

3

この変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="cds_dt">
 <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="x:Structured">
  <xsl:element name="Formatted" namespace="cds_dt">
   <xsl:value-of select=
   "concat(x:Line1, ', ', x:City, ', ', x:PostalZipCode/x:PostalCode)"/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<Address addressType="R">
    <Structured xmlns="cds_dt">
        <Line1>15 Paradise</Line1>
        <City>Toronto</City>
        <CountrySubdivisionCode>-50</CountrySubdivisionCode>
        <PostalZipCode>
            <PostalCode>A1A1O1</PostalCode>
        </PostalZipCode>
    </Structured>
</Address>

必要な正しい結果が生成されます

<Address addressType="R">
   <Formatted xmlns="cds_dt">15 Paradise, Toronto, A1A1O1</Formatted>
</Address>

説明: ID ルールのオーバーライド+ 名前空間と<xsl:element>命令の適切な使用。

于 2012-03-02T21:15:06.207 に答える
0

あなたはそのようなことを意味しますか:

<Address addressType="R">
    <Formatted xmlns="cds_dt">
        <xsl:value-of select="concat(Line1, ', ', City, PostalZipCode/PostalCode )"/>
    </Formatted>
</Address>

注: 読みやすくするために、引数のパスを concat() に短縮しました。ではなく、Line1実際には である必要がありますAddress/Structured/Line1

于 2012-03-02T21:04:06.730 に答える