前几天写的关于post方法调用webservice的改进.突然发现有问题,当webservice返回的XML文档有多级子节点时,存入iframe中的InnerText中会有很多减号....,这样一来,再用loadXML方法加载这个innerText时...就出错了.(减号是XML文档自动生成的,但放到innerText中就变成了一个字符了,设想下一个即将要载入的XML字符串中有很多这样的减号,能是一个规范的XML文档吗?不知道大家有没有理解我要表达的意思....)反正就是要把减号去掉....
或者采用一种更智能的办法,因为返回的XML文档你只想要它的关键的部分.然后我们可以把那个关键的部分提取出来,自己新建一个节点,把提取出来的东西放再新建的节点里构成一个新的XML文档.
function
getxmlmsg()
... {
alert(xmlfile.document.body.innerText);
var str=xmlfile.document.body.innerText;
str=str.split("-").join("");//去掉减号
alert(str);
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async="false";
xmldoc.loadXML(str);
//var msg=xmldoc.documentElement.childNodes.item(0).text;
//alert(msg);
//alert(xmldoc.xml);
var msg=xmldoc.childNodes[1].childNodes[1].childNodes[0].childNodes[0].text;
alert(msg);
}
... {
alert(xmlfile.document.body.innerText);
var str=xmlfile.document.body.innerText;
str=str.split("-").join("");//去掉减号
alert(str);
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async="false";
xmldoc.loadXML(str);
//var msg=xmldoc.documentElement.childNodes.item(0).text;
//alert(msg);
//alert(xmldoc.xml);
var msg=xmldoc.childNodes[1].childNodes[1].childNodes[0].childNodes[0].text;
alert(msg);
}
//
Creat XMLDOM Instance
function CreateXMLDOM()
... {
//Build a string Array
var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
"Microsoft.XmlDom"];
//Circle the Array until creat the XMLDOM Instence
for (var i=0; i < arrSignatures.length; i++) ...{
try ...{
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
} catch (oError) ...{
//on Error ignore
}
}
throw new Error("You system have not MSXML");
}
// Dom Instance load XML format String,and trans to XmlDom Instance
function CreatStrDom(str,bstr,estr)
... {
var doc=CreateXMLDOM(); //Creat the Null XMLDOM
str = str.split(" ").join(""); //delete newline sign and enter sign
str = str.split(" ").join(""); //delete space
str = str.slice(str.indexOf(bstr),str.indexOf(estr)); //intercept a part of the str,截取想要的部分
str = "<root>"+str+"</root>"; //add the string root node,新建一个节点,把截取的部分放入这个节点
doc.async=false; //set async is false
doc.loadXML(str); //load the string to build to a XMLDOM Instance (if wanna load a XML file,should use Function "load( [file address string] )" but "loadXML( [string] )" ),导入新的XML字符串,而不是那个innerText中的东东了
return doc; //return doc instance
}
function CreateXMLDOM()
... {
//Build a string Array
var arrSignatures = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
"MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument",
"Microsoft.XmlDom"];
//Circle the Array until creat the XMLDOM Instence
for (var i=0; i < arrSignatures.length; i++) ...{
try ...{
var oXmlDom = new ActiveXObject(arrSignatures[i]);
return oXmlDom;
} catch (oError) ...{
//on Error ignore
}
}
throw new Error("You system have not MSXML");
}
// Dom Instance load XML format String,and trans to XmlDom Instance
function CreatStrDom(str,bstr,estr)
... {
var doc=CreateXMLDOM(); //Creat the Null XMLDOM
str = str.split(" ").join(""); //delete newline sign and enter sign
str = str.split(" ").join(""); //delete space
str = str.slice(str.indexOf(bstr),str.indexOf(estr)); //intercept a part of the str,截取想要的部分
str = "<root>"+str+"</root>"; //add the string root node,新建一个节点,把截取的部分放入这个节点
doc.async=false; //set async is false
doc.loadXML(str); //load the string to build to a XMLDOM Instance (if wanna load a XML file,should use Function "load( [file address string] )" but "loadXML( [string] )" ),导入新的XML字符串,而不是那个innerText中的东东了
return doc; //return doc instance
}
function
getxml1()
... {
var str1 = xmlfile.document.body.innerText;
var tag='<NewDataSet xmlns="">';
alert(str1);
str1=str1.slice(str1.indexOf('<NewDataSet xmlns="">')+tag.length,str1.indexOf("</NewDataSet>"))//取<NewDataSet>...</NewDataSet>中间的东东
alert(str1);
//var xmldoc = CreatStrDom(str1,'-<NewDataSet xmlns="">','</NewDataSet>');
//alert(xmldoc.xml);
}
... {
var str1 = xmlfile.document.body.innerText;
var tag='<NewDataSet xmlns="">';
alert(str1);
str1=str1.slice(str1.indexOf('<NewDataSet xmlns="">')+tag.length,str1.indexOf("</NewDataSet>"))//取<NewDataSet>...</NewDataSet>中间的东东
alert(str1);
//var xmldoc = CreatStrDom(str1,'-<NewDataSet xmlns="">','</NewDataSet>');
//alert(xmldoc.xml);
}