使用XSL 1.0解析URL编码的XML到UTF-8

使用XSL 1.0解析URL编码的XML到UTF-8,xml,xslt,encoding,utf-8,Xml,Xslt,Encoding,Utf 8,我在解析以下XML文件时遇到问题: +金砖四国+++ %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+Fo

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


+金砖四国+++ %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++%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++%26lt%3B%2Ftr%26gt%3B++ %26lt%3Btr%26gt%3B++%26lt%3Btd%26gt%3BANADOU+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%3Btr%26gt%3B++%26lt%3Btd%26gt%3BFiba+Em.+ve+Hay.+%C4%B0kinci+++Standart+EYF%26lt%3B%2Ftd%26gt%3bt+++ %26lt%3Btd%26gt%3B0%2C011639%26lt%3B%2Ftd%26gt%3B++%26lt%3B-0%2C16%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3B++%3B++%26lt%3Btd%26gt%3B++%C4%B1f+Em。 +格里尔+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++%26lt%3B%2Ftr%26gt++% +++%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%3BEMEKLLIK+Fonlar%C4%B1++%28BES%29+-+++ Kat%C4%B1l%C4%B1m+Fonlar%C4%B1%26lt%3B%2Ftd%26gt%3B++%26lt%3B++%26gt%3B++%26lt%3B%2Ftd%26gt%3B++%26lt%3B%26GTD%2Ftd%26gt%3B++%26lt%3B++%3B%2Ftr%26gt++%26gt%3B++%26lt%3B%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%3B%3Btd%26gt%3B0%2C011757%26lt%3B%2Ftd%26gt%3B+++ %26lt%3Btd%26gt%3B-0%2C31%26lt%3B%2Ftd%26gt%3B++%26lt%3B%2Ftr%26gt%3Btr%26gt%3B++%26lt%3Btd%26gt%3BAsya+Em.+ve+Hay.+B%C3%BCy.+Am.+Kat。 +++Esnek+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++%26lt%3B%2Ftr%26gt%3B++%26lt%3Btr%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%2表格%26gt%3B++%28非%3A+分析+i%C3%A7erikleri+fonbul。 com%E2%80%98dan+al%C4%B1nm%C4%B1%C5%9Ft%C4%B1r

  </DataContent>

输出应为:

BricÜlkeleri Esnek EYF 0016178-0,52
Emeklilik Fonları(BES)-Karma&Esnek Fonlar
安联雅安酒店。 İkinci Esnek EYF 0050458-0,61
. 我喜欢干草。İkinci Standart EYF
0011639-0,16 Vakıf Em。 格丽尔·阿姆。2.Esnek EYF 0020458-0,15
海恩。Em.Kamu Borçlanma AraçlarıStandart EYF 0033045

我的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;         
        }


功能解码
{  
dhtml;
var decodedString=decodeURIComponent(s.replace(/\+/g');
decodedString=decodedString。替换(/&;lt;/g');
解码字符串=解码字符串。替换(/&;gt;/g');
decodedString=decodedString。替换(/&;amp;/g,“&;”);
decodedString=decodedString.replace(/&apos;/g,'YY');
decodedString=decodedString.replace(/“g”,”);
decodedString=decodedString.replace(/&;39;/g,String.fromCharCode(39));
decodedString=decodedString.replace(/br/g,'br/;');
decodedString='html'+decodedString+'/;html';
decodedString=unescape(decodedString)
decodedString=decodedString.replace(/style([\s\s]*?)\/style/gi',);
decodedString=decodedString.replace(/script([\s\s]*?)\/script/gi',);
decodedString=decodedString.replace(/\/div/ig,'\n');
decodedString=decodedString.replace(/\/li/ig,'\n');
decodedString=decodedString.replace(/li/ig,'*');
decodedString=decodedString.replace(/\/ul/ig,'\n');
decodedString=decodedString.replace(/\/p/ig,'\n\n');
decodedString=decodedString.replace(/br\s*[\/]?/gi,“\n”);
decodedString=decodedString.replace(/[^]+/ig',);
返回解码字符串;
}



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

尝试将输出方法更改为
文本
如果输出XML,处理器必须转义符号和字符(除非您指示它禁用输出转义).

您的输出方法是什么?我的输出方法是XML@michael.hor257k将输出方法更改为文本会起作用,但我想将其输出为XML…@michael.hor257k您显示给我们的输出是文本。而且,正如我所说的,XML不能包含未替换的符号和字符。因此,您想要的对我来说毫无意义。很抱歉,我的回复太晚了……我已经收到了将输出方法也更改为text,但它没有给出我期望的结果,因此我使用了CDATA instea
<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>