0

わかりました。responseTextに「&」文字が含まれているため、解析時に問題が発生する可能性があります。だから私はresponseTextを取得して、' &'を''に&変更したい

responseTextが文字列であることを認識しています。理想的には、これをresponseXMLにフィードバックして、&を使用して新しいxmlで解析したいと思います。

どんな助けでも大歓迎

            responseXML  = xmlhttp.responseXML;
        var myResponseText = "<document-metadata><item><name>ccms_customer_key</name><value>0100000931012004110</value></item><item><name>ccms_customer_name</name><value>Mr Joe Bloggs</value></item><item><name>ccms_customer_salutation_name</name><value>Mr</value></item><item><name>ccms_rm_name</name><value></value></item><item><name>ccms_dms_key</name><value>2432559OEKM</value></item><item><name>ccms_customer_address</name><value>Main & Street Dublin </value></item></document-metadata>";
        /*
        if(myResponseText.indexOf('&') >= 0)    
        {
            var str = myResponseText.replace(/&/g,"&amp;");
            return str;
        }
        */
        //old line getSession().setAttribute('LH_METADATA_XML',xmlhttp.responseText);
        getSession().setAttribute('LH_METADATA_XML',myResponseText);

        // extract COMP_DMS_KEY from metadata
        var root = responseXML.getElementsByTagName('document-metadata').item(0);
4

1 に答える 1

1

DOMParserwithや(エラーのために必要な場合もあります)など、まったく異なる方法で文字列を解析したり、 HTMLDivElementdocument.implementation.createHTMLDocument("")を作成して設定したりしてみませんか?innerHTML

var doc = document.implementation.createHTMLDocument(""); // create a HTML document
doc.body.innerHTML = "<document-metadata><item><name>ccms_customer_key</name><value>0100000931012004110</value></item><item><name>ccms_customer_name</name><value>Mr Joe Bloggs</value></item><item><name>ccms_customer_salutation_name</name><value>Mr</value></item><item><name>ccms_rm_name</name><value></value></item><item><name>ccms_dms_key</name><value>2432559OEKM</value></item><item><name>ccms_customer_address</name><value>Main & Street Dublin </value></item></document-metadata>";
doc.body; // navigate to your root node from here

これを行うと(つまり、 application/xmlではなくtext/htmlを使用する)、パーサーはそれほど厳密ではなく、DOMメソッドを使用する機能を維持しながら問題が発生しないことを意味します。&

ここから、これを再シリアル化して真のXMLドキュメントに変換することもできます。たとえばroot、ルートノードです。

var x = new XMLSerializer(), p = new DOMParser(), xml_string, xml_doc;
xml_string = x.serializeToString(root); // now we have a valid string
xml_doc = p.parseFromString(xml_string, 'application/xml'); // and now it is an XML document
于 2013-01-29T14:39:34.247 に答える