1

xml:

<?xml version="1.0"?>
<student_list>
<ID No="A-1">
<name>Jon</name>
<mark>80</mark>
</ID>
<ID No="A-2">
<name>Ray</name>
<mark>81</mark>
</ID>
</student_list>

私のxsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text" indent="yes"/>

<xsl:template match="/">
    <xsl:apply-templates />
    </xsl:template>

<xsl:template match="//ID">
     ID:string:"
<xsl:value-of select="@No"/>"
          </xsl:template>

    <xsl:template match="name">
      name:string:"<xsl:apply-templates />"
     </xsl:template>

  <xsl:template match="mark">
      mark:string:"<xsl:apply-templates />"
     </xsl:template>

 </xsl:stylesheet>

期待される出力: ID:string:"A-1" name:string:"jon" mark:string:"80" ID:string:"A-2" name:string:"Ray" mark:string:"81"

誰か助けてください。


返信ありがとうございます。上記のコードを更新することで出力が得られましたが、「テキスト出力」モードですべての行の改行を取得するにはどうすればよいですか。このコードを使用してみました:

<xsl:template name="Newline"><xsl:text> 
</xsl:text>
</xsl:template>

line--1
 <xsl:call-template name="Newline" /> 
line--2 

しかし、これは私に改行を与えていません。どんな情報も役に立ちます。再度、感謝します。

4

1 に答える 1

1

問題は、name要素とmark要素がID要素の子であることですが、 IDに一致するテンプレートには、子を処理し続けるコードがないため、一致しません。

IDマッチング テンプレートを次のように変更します。

<xsl:template match="//ID"> 
   ID:string:"<xsl:value-of select="@No"/>" 
   <xsl:apply-templates /> 
</xsl:template> 

改行が気になる場合は、このようにした方が良いかもしれません(改行を取得するための改行はどこにありますか)

<xsl:template match="//ID">
   <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" />
   <xsl:apply-templates/>
</xsl:template>

それともこれか……。

<xsl:template match="//ID">
   <xsl:text>ID:string:"</xsl:text>
   <xsl:value-of select="@No" />
   <xsl:text>"&#13;</xsl:text>
   <xsl:apply-templates/>
</xsl:template>

ここに完全な XSLT があります

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:output method="text" indent="yes"/>

   <xsl:template match="//ID">
      <xsl:value-of select="concat('ID:string:&quot;', @No, '&quot;&#13;')" />
      <xsl:apply-templates/>
   </xsl:template>

   <xsl:template match="name|mark">
    <xsl:value-of select="concat(local-name()), ':string:&quot;', ., '&quot;&#13;')" />
   </xsl:template>
</xsl:stylesheet>

これにより、期待どおりの結果が得られるはずです。

ID:string:"A-1"
name:string:"Jon"
mark:string:"80"
ID:string:"A-2"
name:string:"Ray"
mark:string:"81"

コードを共有するために名前マークのテンプレートをどのように組み合わせたかに注目してください。

于 2012-07-18T18:08:09.593 に答える