如何通过XSLT和ANT保留“在入站XML文件中”

时间:2013-11-13 02:34:05

标签: xslt ant

这个问题让我今天疯狂。

(注意我添加了间隔以停止下面编码的字符)

在输入XML文件中,我有html文本,例如“& lt; li class =& quot; classname& quot;& gt;”

根据我们的需要正确编码输入文件。

麻烦的是我通过XSLT运行它以将XML转换为CSV。 & and amp; LT; &安培; GT;,但是XSLT正在输出& QUOT;因为'''所以我最终使用下面的xslt段尝试将嵌入的引号替换回& quot;。

我无法弄清楚如何让xslt用&替换引号“因此,因为我已经在使用ant进行xslt处理,所以我认为在xslt任务之后使用ANT替换更容易用& quot替换'\”'。

现在我疯了,因为ANT也在扩大& QUOT;并取代“与”!!!

问题的一部分: 有没有办法保护& QUOT;在xslt转换期间。 (最好) 2.如果没有,有没有办法用字符串替换xslt中的“with& quot”? 3.如果它们都不起作用,那么获得ANT输出的语法是什么? QUOT;而不是“(即逃避实体)

ANT

<replace file="${dataload.dataDir}/inbound/products/wc_store_locator.csv" token='\"' value="&quot;" />

XSLT

<xsl:call-template name="replace-quotes">
          <xsl:with-param name="text" select="notificationMessage"/>
          <xsl:with-param name="replace" select="'&quot;'" />
          <xsl:with-param name="with" select="'\&quot;'"/>
      </xsl:call-template>
      <xsl:text>&quot;</xsl:text>

      <xsl:text>&#10;</xsl:text>

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

  <xsl:template name="replace-quotes">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="with"/>
        <xsl:choose>
            <xsl:when test="contains($text,$replace)">
                <xsl:value-of select="substring-before($text,$replace)"/>
                <xsl:value-of select="$with"/>
                <xsl:call-template name="replace-quotes">
                    <xsl:with-param name="text"
                        select="substring-after($text,$replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="with" select="$with"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

2 个答案:

答案 0 :(得分:0)

啊没关系,我想出了蚂蚁语法:

它是:         &安培;安培; QUOT;

答案 1 :(得分:0)

使用不支持XML的进程替换“by &quot;似乎很疯狂 - 它将替换所有属性分隔引号以及出现在文本内容中的引号。

当我看到这样的问题时,我的直接反应是挑战要求。你为什么要这样做?当XML解析器不要求对它们进行转义时,为什么需要转义引号?您是否正在使用不是真正的XML解析器的XML来阅读XML,如果是这样,为什么?如果您不想正确使用XML,那么根本使用它是否明智?