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;改用。

每秒更新的问题:让我们看一下大图:

这个 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 回答