【问题标题】:Parsing URL encodded XML to UTF-8 using XSL 1.0使用 XSL 1.0 将 URL 编码的 XML 解析为 UTF-8
【发布时间】:2017-01-05 18:10:53
【问题描述】:

我在解析以下 XML 文件时遇到问题:

<DataContent>

+金砖+++ %C3%9Clkeleri+Esnek+EYF%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C016178%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B-0%2C52 %26lt%3B%2Ftd%26gt%3B++ %26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BEmeklilik+Fonlar%C4%B1+%28BES%29+-+++Karma+%26amp%3B+Esnek+Fonlar %26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B+%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B+%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr %26gt%3B+++%26lt%3Btd%26gt%3BAllianz+Ya%C5%9Fam+ve+Em。 +%C4%B0kinci+++Esnek+EYF%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C050458%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B- 0%2C61%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++ %26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BAnadolu+Hayat+Em.+B%C3%BCy%C3%BC.+Ama.+++%C4%B0ki.+Es.+EYF%26lt %3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C043109%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B-0%2C20%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BFiba+Em .+ve+Hay.+%C4%B0kinci+++标准+EYF%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B0%2C011639%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B-0%2C16%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt %3B++%26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BVak%C4%B1f+Em。 +Gelir+Am.+2.+Esnek+++EYF%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C020458%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt %3B-0%2C15%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B +++%26lt%3Btd%26gt%3BNN+Hay.+Em.+Kamu+Bor%C3%A7lanma+++Ara%C3%A7lar%C4%B1+标准+EYF%26lt%3B%2Ftd%26gt% 3B+++%26lt%3Btd%26gt%3B0%2C033045%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B-0%2C02%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BEmeklilik+Fonlar %C4%B1+%28BES%29+-+++ 凯特%C4%B1l%C4%B1m+Fonlar%C4%B1%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B+%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt% 3B+%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++ %26lt%3Btd%26gt%3BKat%C4%B1l%C4%B1m+Em.+ve+Hay.+++Alter.%C4%B0kinci+Esnek%28D%C3%B6viz%29+EYF%26lt%3B% 2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C011757%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B-0%2C31%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++%26lt%3Btd%26gt%3BAsya+Em .+ve+Hay.+B%C3%BCy.+Am.+Kat. +++埃斯内克+EYF%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C013884%26lt%3B%2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B-0%2C14%26lt %3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%26gt%3B+++ %26lt%3Btd%26gt%3BAsya+Em.+ve+Hay.+B%C3%BCy.+Ama%C3%A7l%C4%B1+++Gr.+Kat.+Es.+EYF%26lt%3B %2Ftd%26gt%3B+++%26lt%3Btd%26gt%3B0%2C013993%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B-0%2C07%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B%26lt%3B%2Ftable%26gt%3B++%28Not%3A+分析+i %C3%A7erikleri+fonbul。 com%E2%80%98dan+al%C4%B1nm%C4%B1%C5%9Ft%C4%B1r.

  </DataContent>

输出应该是:

Bric Ülkeleri Esnek EYF 0,016178 -0,52
Emeklilik Fonları (BES) -Karma & Esnek Fonlar
安联 Yaşam ve Em。 İkinci Esnek EYF 0,050458 -0,61
.干草。 İkinci Standart EYF
0,011639 -0,16 Vakıf Em。 格利尔是。 2. 埃斯内克 EYF 0,020458 -0,15
NN干草。嗯。 Kamu Borçlanma Araçları Standart EYF 0,033045

我的 XSL 样式表是:

<msxsl:script language="JScript" implements-prefix="user">

        function decode(s)
        {  
        var encodedHTML;

        var decodedString = decodeURIComponent(s.replace(/\+/g, ' '));
        decodedString = decodedString.replace(/&amp;lt;/g,'&lt;');
        decodedString = decodedString.replace(/&amp;gt;/g,'&gt;');
        decodedString = decodedString.replace(/&amp;amp;/g,'&amp;');
        decodedString = decodedString.replace(/&amp;apos;/g,'YY');
        decodedString = decodedString.replace(/&amp;quot;/g,'"');
        decodedString = decodedString.replace(/&amp;#39;/g,String.fromCharCode(39));
        decodedString = decodedString.replace(/&lt;br&gt;/g,'&lt;br&#47;&gt;');
        decodedString = '&lt;html&gt;' + decodedString + '&lt;&#47;html&gt;';

        decodedString = unescape(decodedString)

        decodedString = decodedString.replace(/&lt;style([\s\S]*?)&lt;\/style&gt;/gi, '');
        decodedString = decodedString.replace(/&lt;script([\s\S]*?)&lt;\/script&gt;/gi, '');
        decodedString = decodedString.replace(/&lt;\/div&gt;/ig, '\n');
        decodedString = decodedString.replace(/&lt;\/li&gt;/ig, '\n');
        decodedString = decodedString.replace(/&lt;li&gt;/ig, '  *  ');
        decodedString = decodedString.replace(/&lt;\/ul&gt;/ig, '\n');
        decodedString = decodedString.replace(/&lt;\/p&gt;/ig, '\n\n');
        decodedString = decodedString.replace(/&lt;br\s*[\/]?&gt;/gi, "\n");
        decodedString = decodedString.replace(/&lt;[^&gt;]+&gt;/ig, '');

        return decodedString;         
        }

<xsl:template match="/">

    <xsl:value-of select="user:decode(string(//DataContent))" />  

</xsl:template>

当我解析 XML 文档时,输出仍然包含“&” ...我需要用“&”替换,我缺少什么?...我使用的是 XSL 1.0 版,转换引擎是 MSXML 或 .Net 1.0

【问题讨论】:

  • 你的输出方法是什么?
  • 我的输出方式是 XML @michael.hor257k

标签: xml xslt encoding utf-8


【解决方案1】:

尝试将您的输出方法更改为text 如果您要输出 XML,处理器必须转义 & 字符(除非您指示它禁用输出转义)。

【讨论】:

  • 将输出方法更改为文本会起作用,但我想将其输出为 XML ... @michael.hor257k
  • 您向我们展示的输出是文本。而且,正如我所说,XML 不能包含未转义的 & 字符。所以你想要的对我来说毫无意义。
  • 对不起,回复晚了...我也将输出方法更改为文本,但它没有给出我期望的结果,所以我改用 CDATA,它起作用了。非常感谢@michael.hor257k
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2013-08-04
  • 2018-06-01
  • 2010-12-26
  • 2018-06-20
相关资源
最近更新 更多