1

この変換からの出力にはテキストのみが含まれますが、HTML とテキストの出力が必要です。そのためには何を変更する必要がありますか?

私はVS 2010を使用しています

現在の出力例:

ジョーンズ・マーティン・ケリー・マーシャル

これはxslにもありますが、コード例には表示されていませんでした:

 xsl:output
    standalone="no"
    method="xml"
    indent="yes"
    omit-xml-declaration="no"
    version="1.0" 

xsl:

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

  <xsl:template match="/">

    <xsl:for-each select="/people">

      <div class="lastnames">
        <ul>
          <li>
            <xsl:value-of select="lastname" disable-output-escaping="yes" />
          </li>
        </ul>
      </div>

    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

C#:

XslCompiledTransform xslt = new XslCompiledTransform();

xslt.Load(xslPath);

using (XmlWriter writer = XmlWriter.Create(outPath + 
                                          fileName + 
                                          "." +
                                            fileExt
                                         , xslt.OutputSettings))
{
    xslt.Transform(fileNode, null, writer);
    writer.Flush();
    writer.Close();
}
4

2 に答える 2

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="people">
  <div class="lastnames">
   <ul>
     <xsl:apply-templates/>
   </ul>
  </div>
 </xsl:template>

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

この XML ドキュメントに適用した場合(何も提供されていません!!!):

<people>
 <lastname>Jones</lastname>
 <lastname>Martin</lastname>
 <lastname>Kelley</lastname>
 <lastname>Marshall</lastname>
</people>

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

<div class="lastnames">
  <ul>
    <li>Jones</li>
    <li>Martin</li>
    <li>Kelley</li>
    <li>Marshall</li>
  </ul>
</div>

そして、期待どおりにブラウザに表示されます。

  • ジョーンズ
  • マーティン
  • ケリー
  • マーシャル
于 2012-08-19T18:26:57.227 に答える
1

入力データを見ないと、何が問題なのかを確認するのは困難です。xsl:outputただし、最初に要素を確認することをお勧めします。「入力には存在するが、[the] コードサンプルには表示されない」とあなたは言います。それ自体が私を疑わしくさせます。実際にそれを表示しても、XML 要素として表示されないという事実は、二重に疑念を抱かせます。

それらはあなたが実際に尋ねた質問とは関係ありませんが、あなたのコードを読んで他のいくつかのことが私を襲います:

  • xsl:outputを使用していmethod="xml"ますが、XHTML を作成していません。使用していない理由はありますmethod="html"か?
  • 人々の姓の表示で出力エスケープを無効にしているのはなぜですか? 入力データの人名に小なり記号が含まれていると思いますか? その場合、文字データを出力するのではなく、不正な形式の出力を作成しますか?
  • 単一のテンプレートのxsl:for-eachは何の作業も行っていません (ルート要素に名前が付けられていない場合、出力なしでスタイルシートをサイレントに完全にすることを除いてpeople)。テンプレートを

    <xsl:template match="people">
      <div class="lastnames">
        <ul>
          <xsl:apply-templates/>
        </ul>
      </div>
    </xsl:template>
    <xsl:template match="lastname">
      <li>
        <xsl:apply-templates/>
      </li>
    </xsl:template>
  • 于 2012-08-19T17:52:47.030 に答える