Mozilla不解释我的xml中包含的HTML

时间:2017-05-10 10:23:28

标签: javascript xml xslt

我不会说英语,因为我是法国人,如果我犯了错误就很抱歉。 我有这段代码:

<xsl:when test="$PARAM=1">
        <xsl:if test="LabelType=0 or LabelType=1 or LabelType=2 or LabelType=3 or LabelType=4 or LabelType=5 or LabelType=9 or LabelType=11 or LabelType=99 or LabelType=98 or LabelType=15 or LabelType=14" >
          <div class="sst">
            <table style="font-size: 12px">
              <tr>
                <td>
                  <xsl:choose>
                    <xsl:when test="LabelType=1">
                      <img src="Images/Atcd/stethoscope-icon.png" alt="Consultation" />
                      Consultation
                    </xsl:when>
                    <xsl:when test="LabelType=2">
                      <img src="Images/Atcd/Pen-icon.png" alt="Certificat" />
                      Certificat
                    </xsl:when>
                    <xsl:when test="LabelType=3">
                      <img src="Images/Atcd/Pen-3-icon.png" alt="Demande" />
                      Demande
                    </xsl:when>
                    <xsl:when test="LabelType=4">
                      <img src="Images/Atcd/pill-icon.png" alt="Prescription" />
                      Prescription
                    </xsl:when>
                    <xsl:when test="LabelType=5">
                      <img src="Images/options-icon2.png" alt="Formulaire" />
                      Formulaire
                    </xsl:when>
                    <xsl:when test="LabelType=8">
                      <img src="Images/Atcd/Bio-hazard-icon.png" alt="Vaccin" />
                      Vaccin
                    </xsl:when>
                    <xsl:when test="LabelType=9">
                      <img src="Images/Atcd/Coins-icon.png" alt="Reglement" />
                      Reglement
                    </xsl:when>
                    <xsl:when test="LabelType=10">
                      <img src="Images/Atcd/Paper-Clip-icon.png" alt="Binary" />
                      Binary
                    </xsl:when>
                    <xsl:when test="LabelType=11">
                      <img src="Images/Atcd/BPink.png" alt="Grossesse" />
                      Grossesse
                    </xsl:when>
                    <xsl:when test="LabelType=15">
                      <img src="Images/Atcd/stethoscope-icon.png" alt="Planche" />
                      Planche
                    </xsl:when>
                    <xsl:when test="LabelType=14">
                      <img src="Images/Atcd/stethoscope-icon.png" alt="Audio" />
                      Audio
                    </xsl:when>
                    <xsl:when test="LabelType=99">
                      <img src="Images/Atcd/twitter-bulb-icon.png" alt="Conclusion" />
                      Conclusion
                    </xsl:when>
                    <xsl:when test="LabelType=98">
                      <img src="Images/Atcd/You-make-me-hurt-icon.png" alt="A.T." />
                      A.T.
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:if test="LabelType != 0">
                        <img src="Images/Atcd/Medical-invoice-information-icon.png" alt="Inconnu" />
                        Inconnu <xsl:value-of select="LabelType"/>
                      </xsl:if>
                    </xsl:otherwise>
                  </xsl:choose>
                </td>
              </tr>
            </table>
          </div>
          <xsl:if test="Texte1">
            <xsl:if test="Title1">
              <div class="sst2">
                <xsl:value-of disable-output-escaping="yes"  select="Title1"/>
              </div>
            </xsl:if>
            <div class="stx">
              <xsl:value-of disable-output-escaping="yes"  select="Texte1"/>
            </div>
          </xsl:if>
          <xsl:if test="LabelType!=5 and LabelType!=15 and LabelType!=14">
            <xsl:if test="Texte2">
              <xsl:if test="Title2">
                <div class="sst2">
                  <xsl:value-of disable-output-escaping="yes"  select="Title2"/>
                </div>
              </xsl:if>
              <div class="stx">
                <xsl:value-of disable-output-escaping="yes"  select="Texte2"/>
              </div>
            </xsl:if>
            </xsl:if>
          <xsl:if test="LabelType!=15 and LabelType!=14">
            <xsl:if test="Texte3">
              <xsl:if test="Title3">
                <div class="sst2">
                  <xsl:value-of disable-output-escaping="yes"  select="Title3"/>
                </div>
              </xsl:if>
              <div class="stx">
                <xsl:value-of disable-output-escaping="yes"  select="Texte3"/>
              </div>
            </xsl:if>
            </xsl:if>
          <xsl:if test="LabelType!=15 and LabelType!=14">
            <xsl:if test="Texte4">
              <xsl:if test="Title4">
                <div class="sst2">
                  <xsl:value-of disable-output-escaping="yes"  select="Title4"/>
                </div>
              </xsl:if>
              <div class="stx">
                <xsl:value-of disable-output-escaping="yes"  select="Texte4"/>
              </div>
            </xsl:if>
            </xsl:if>
          <xsl:apply-templates select="Suivis">
            <xsl:with-param name="viewtype" select="$viewtype" />
          </xsl:apply-templates>
        </xsl:if>
      </xsl:when>

这样做了很多“div”,它在chrome和IE上运行得非常好但是在Mozilla中,disable-output-escaping不起作用,我有一些HTML代码块没有被解释。我试了很多东西,但任何解决方案都有效。在Javascript中,我可以获取div的内容并将其放回到使用InnerHTML的其他div中,但它仅适用于一个div而不是所有div。我认为这是因为它是一个循环,我不能用同一个id调用多个div。你能帮帮我吗?我被封锁了一周。

XML:

<Document>
<LabelType>4</LabelType>
<Texte1>&lt;div&gt;&lt;span style=&quot;font-family: inherit; font-size: inherit&quot;&gt;&lt;STRONG&gt;ZOLPIDEM ALMUS 10 mg Cpr pell séc Plq/14&lt;/STRONG&gt;&lt;/span&gt; &lt;span style=&quot;font-family: inherit; color:#0000ff; font-size: inherit;&quot;&gt;(2 boîtes)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: inherit; font-size: inherit&quot;&gt;&lt;div&gt;Prendre un comprimé au coucher, pendant un  mois &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;</Texte1>
</Document>

输出:

<div><span style="font-family: inherit; font-size: inherit"><STRONG>ZOLPIDEM ALMUS 10 mg Cpr pell séc Plq/14</STRONG></span> <span style="font-family: inherit; color:#0000ff; font-size: inherit;">(2 boîtes)</span></div><div style="font-family: inherit; font-size: inherit"><div>Prendre un comprimé au coucher, pendant un mois </div></div><div>&nbsp;</div>

我想要的是什么:

ZOLPIDEM ALMUS 10 mg CprpellécPlq/ 14(2boîtes) Prendreuncompriméaucoucher,pendant un mois

2 个答案:

答案 0 :(得分:0)

依靠disable-output-escaping通常是最糟糕的选择。你应该只在没有其他人的情况下这样做。 XSLT规范实际上说:

  

如果XSLT处理器控制输出结果树的方式,则它只能禁用输出转义。情况可能并非总是如此。例如,结果树可以用作另一个XSLT转换的源树而不是输出.XSLT处理器不需要支持禁用输出转义。 [...]

     

由于禁用输出转义可能不适用于所有XSLT处理器,并且可能导致格式不正确的XML,只有在没有替代时才应该使用

(XSLT 1.0建议,第16.4节;增加了重点)

如果您考虑一下,禁用像您这样的任务的输出转义会假定一个处理模型,其中重新解析转换的序列化输出。只有这样,具有HTML形式的文本才能转换为XSLT数据模型中的实际HTML元素。但是,当您在浏览器中执行转换时,对我来说似乎完全合理的是浏览器实际上输出结果,更不用说重新解析它了,因为转换结果已经是原则上可以按原样使用的文档。

最终,相关规范完全允许Firefox报告给定输入的行为。其他浏览器的行为不同也不是反指示(并且也允许您为它们描述的行为)。似乎不太可能任何依赖于disable-output-escaping的方法 - 或者通常在重新解析XSLT输出的浏览器上 - 将满足您的需求。

基本上,您需要做的是解析某些输入元素的字符串值,如HTML(或XHTML),以获取要使用的节点集或结果树片段(假设XSLT 1.0)。这里已经多次提出了这些问题,除了disable-output-escaping以外,所有提供任何解决方案的问题都得出了这个结论。提供具体变化的那些是:

最终,如果你可以说服控制输入XML形式的人提供嵌入式HTML作为实际的XHTML片段而不是文本,那么这对你来说会更容易,并且可能更容易和更强大。如果确实那不是一个选择,那么你会得到我的同情。

答案 1 :(得分:0)

谢谢你们所有人试图帮助我。我找到了解决方案:

function decode() {
  var divs = document.getElementsByTagName('div');
  for(var i = 0; i < divs.length; i++) { 
    var div = divs[i];
    if (div.className == "stx") {
      div.innerHTML = div.firstChild.nodeValue;
    }
  }
}

我希望它能帮助其他民族。再见:))