0

XSL と XML について質問があります。次の例では、「1」と「2」を記述する必要があります。

XSL:

<xsl:for-each select="bodytext/artigo">
 <xsl:choose>
 <xsl:when test="@tip = '1'">
   <h2>1</h2>
 </xsl:when>
 <xsl:when test="@tip = '2'">
   <h2>2</h2>
 </xsl:when>
 <xsl:otherwise>
  <h2>3</h2>
 </xsl:otherwise>

XML:

<utilizador>Manuel</utilizador>
<sex>M</sex>
<artigo tip='1'>
    <nome>A Mentira Sagrada</nome>
    <price>12.99</price>
    <iva>23 %</iva>
    <link>9c6af52790</link>
</artigo>
<artigo tip='2'>
    <nome>A Mentira Sagrada</nome>
    <price>12.99</price>
    <iva>23 %</iva>
    <link>u8Jp06blGQkKxdEbkoT0</link>
</artigo>

「1」しか印刷されておらず、「1」と「2」を印刷する必要があります。

追加情報: 問題が「&」記号に関連していることがわかりました。以下の XML に「&」記号が付いていると、機能しません。削除すると機能しますが、必要でした。

<bodytext>
    <utilizador>Criador Intelectual</utilizador>
    <sex>M</sex>
 <artigo tip='1'>
        <nome>A Mentira Sagrada</nome>
        <price>12.99</price>
        <iva>23 %</iva>
        <link>http://q-ebooks.com.pt/fulfillment/URLLink.acsm?action=enterorder&</link>
     </artigo>
 <artigo tip='2'>
        <nome>A Mentira Sagrada</nome>
        <price>12.99</price>
        <iva>23 %</iva>
        <link>teste2</link>
     </artigo>
</bodytext>
4

1 に答える 1

0

入力 XML ファイル全体 (または予期しない動作を示す最小のサブセット) を含める必要があります。入力ファイルを知らずに、これは暗いショットです: XPath を変更して、健全性チェックとしてすべての artigo 要素を含めてみてください:

<xsl:for-each select="//artigo">
...

この結果、出力されるのが '1' だけではない場合は、必要に応じて XPath を強化することができます (ただし、XML 入力ファイルをさらに含めてください)。

質問の更新ごと: &amp;「&」の代わりに使用します。生の '&' は XML では使用できません。これは通常、エンティティを導入するために使用されるためです。この使用をエスケープして実際のアンパサンドを含めるには、&amp;代わりに使用します。

質問の 1 秒あたりの更新: 全体像を見てみましょう:

この XSLT 変換:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <root>
      <xsl:for-each select="bodytext/artigo">
        <xsl:choose>
          <xsl:when test="@tip = '1'">
            <h2>1</h2>
          </xsl:when>
          <xsl:when test="@tip = '2'">
            <h2>2</h2>
          </xsl:when>
          <xsl:otherwise>
            <h2>3</h2>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </root>
  </xsl:template>
</xsl:stylesheet>

この入力 XML ファイルに適用されます。

<bodytext>
  <utilizador>Criador Intelectual</utilizador>
  <sex>M</sex>
  <artigo tip='1'>
    <nome>A Mentira Sagrada</nome>
    <price>12.99</price>
    <iva>23 %</iva>
    <link>http://q-ebooks.com.pt/fulfillment/URLLink.acsm?action=enterorder&amp;</link>
  </artigo>
  <artigo tip='2'>
    <nome>A Mentira Sagrada</nome>
    <price>12.99</price>
    <iva>23 %</iva>
    <link>teste2</link>
  </artigo>
</bodytext>

次の出力ファイルが生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <h2>1</h2>
   <h2>2</h2>
</root>
于 2013-10-08T16:16:26.663 に答える