Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用XML字符串中的转义序列替换特殊字符的正则表达式_Javascript_Jquery_Regex_Xml - Fatal编程技术网

Javascript 用XML字符串中的转义序列替换特殊字符的正则表达式

Javascript 用XML字符串中的转义序列替换特殊字符的正则表达式,javascript,jquery,regex,xml,Javascript,Jquery,Regex,Xml,我有一个XML字符串,其中包含一些特殊字符(,&),因此无法使用jQuery$.parseXML进行解析 这是示例XML字符串 <?xml version="1.0" encoding="UTF-8"?> <BackgroundCheck userId="{Username}" password="{Password}"> <BackgroundSearchPackage action="submit" type="{PackageName}">

我有一个XML字符串,其中包含一些特殊字符(,&),因此无法使用jQuery$.parseXML进行解析

这是示例XML字符串

<?xml version="1.0" encoding="UTF-8"?>
<BackgroundCheck userId="{Username}" password="{Password}">
  <BackgroundSearchPackage action="submit" type="{PackageName}">
    <ReferenceId>ab<</ReferenceId>
    <UserArea>
      <PositionDetail>
        <EmploymentState>{StateJob}</EmploymentState>
        <ProposedSalary>{AnnualSalary}</ProposedSalary>
      </PositionDetail>
    </UserArea>
    <PersonalData>
      <PersonName>
        <GivenName>{FirstName}</GivenName>
        <MiddleName>{MiddleName}</MiddleName>
        <FamilyName>{LastName}</FamilyName>
        <Affix>{Generation}</Affix>
      </PersonName>
      <EmailAddress>{Email}</EmailAddress>
      <DemographicDetail>
        <GovernmentId countryCode="US" issuingAuthority="SSN">{SSN}</GovernmentId>
        <DateOfBirth>{DateOfBirth}</DateOfBirth>
      </DemographicDetail>
      {Aliases}
      {PostalAddress}
    </PersonalData>
    <Screenings useConfigurationDefaults="no">
      {Screenings}
      <AdditionalItems type="x:interface">
        <Text>{Search&Type}</Text>
      </AdditionalItems>
      <AdditionalItems type="x:return_xml_results">
        <Text>yes</Text>
      </AdditionalItems>
      <AdditionalItems type="x:embed_credentials">
        <Text>true</Text>
      </AdditionalItems>
      <AdditionalItems type="x:integration_type">
        <Text>Sample XML</Text>
      </AdditionalItems>
      <AdditionalItems type="x:postback_url">
        <Text>{CallbackURL}</Text>
      </AdditionalItems>
      {AdditionalItems}
    </Screenings>
    {Documentation}
  </BackgroundSearchPackage>
</BackgroundCheck>

ab
  • “文本/html”效果更好-
  • 使用html转换文本内容
  • var-oParser=new-DOMParser();
    函数replaceIllegalXML(t){
    var oDOM=oParser.parseFromString(t,“text/html”);
    var nok=oDOM.documentElement.nodeName==“parsererror”;
    如果(挪威克朗){
    log(“无法分析字符串”);
    返回;
    }
    var alltext=oDOM.documentElement.textContent.split(“\n”);
    对于(var i=0;i
    
  • “文本/html”效果更好-
  • 使用html转换文本内容
  • var-oParser=new-DOMParser();
    函数replaceIllegalXML(t){
    var oDOM=oParser.parseFromString(t,“text/html”);
    var nok=oDOM.documentElement.nodeName==“parsererror”;
    如果(挪威克朗){
    log(“无法分析字符串”);
    返回;
    }
    var alltext=oDOM.documentElement.textContent.split(“\n”);
    
    对于(var i=0;i我终于实现了我所需要的。多亏了@mplungjan。正如他所指出的,XML文件必须是有效的才能被解析,并且应该在创建XML的地方使其有效

    我的情况有所不同,我必须在解析无效的XML字符串之前,仅用javascript修复它

    在用javascript(或任何其他编程语言)解析XML字符串时,我们得到了一个错误,指定了错误的内容和行号。 我所做的就是这样

    • 从错误中检索行号
    • 从字符串中提取该行并修复它
    • 重复此过程,直到修复完整的XML
    这就是我所做的

    var oParser = new DOMParser();
    
            function escapeRegExp(str) {
              return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
            }
    
            function remove_error(str, line) {
                var allTexts = str.split("\n");
                var illegal = allTexts[line - 1];
                var extract = illegal.match(/>(.*)</);
    
                extract = extract.pop();
                var fix_extract = extract.replace(/&/g, '&amp;')
                   .replace(/</g, '&lt;')
                   .replace(/>/g, '&gt;')
                   .replace(/"/g, '&quot;')
                   .replace(/'/g, '&apos;');
    
                fix_extract = fix_extract.trim();console.log(fix_extract);
                var re = new RegExp(">"+escapeRegExp(extract.trim())+"<");
                str = str.replace(re,">"+fix_extract+"<");
                return str;
            }
    
            var fixed = "", final_fixed = "";
    
            function process(orig_str) {
                var newDOM = oParser.parseFromString(orig_str, "text/xml");
                var error = newDOM.getElementsByTagName("parsererror");
    
                if (error && error.length) {
                    if (error[0] && error[0].innerHTML) {
                        var err_html = error[0].innerHTML;
                        var parse_err = oParser.parseFromString(err_html, "text/html");
                        var err_log = parse_err.getElementsByTagName("div")[0].innerHTML;
                        console.log(err_log);
                        //var string = err_log.substring(err_log.lastIndexOf("line")+1, err_log.lastIndexOf("at"));
                        var regex = /line\s*(.*?)\s*at/g;
    
                        var matches = [];
                        while (m = regex.exec(err_log)) {
                          matches.push(m[1]);
                        }console.log(matches);
                        var err_line = matches[0];
                        fixed = remove_error(orig_str, err_line);
                        if (fixed) {console.log(fixed);//return;
                            process(fixed);
                        }
                        //console.log(fixed);
                        //alert('Invalid XML:' + err_log);
                    } else {
                        alert('XML could not be parsed');
                        return;
                    }
                    $('.welcome-page section.welcome .inner').html("<h3 class='text-center'>Invalid XML</h3>");
                } else {
                    final_fixed = orig_str;
                }
    
                if(final_fixed) {
                    return final_fixed;
                }
            }
    var newDOM = process(res[0][0]);
    
            if (!newDOM) {
                alert('XML could not be parsed');
                return;
            }
    
    var-oParser=new-DOMParser();
    函数escapeRegExp(str){
    返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
    }
    函数删除_错误(str,行){
    var alltext=str.split(“\n”);
    var非法=所有文本[第1行];
    
    var extract=invalign.match(/>(.*)我终于实现了我所需要的。多亏了@mplungjan。正如他所指出的,XML文件必须是有效的才能被解析,并且应该在创建XML的地方使其有效

    我的情况有所不同,我必须在解析无效的XML字符串之前,仅用javascript修复它

    在用javascript(或任何其他编程语言)解析XML字符串时,我们得到了一个错误,指定了错误的内容和行号。 我所做的就是这样

    • 从错误中检索行号
    • 从字符串中提取该行并修复它
    • 重复此过程,直到修复完整的XML
    这就是我所做的

    var oParser = new DOMParser();
    
            function escapeRegExp(str) {
              return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
            }
    
            function remove_error(str, line) {
                var allTexts = str.split("\n");
                var illegal = allTexts[line - 1];
                var extract = illegal.match(/>(.*)</);
    
                extract = extract.pop();
                var fix_extract = extract.replace(/&/g, '&amp;')
                   .replace(/</g, '&lt;')
                   .replace(/>/g, '&gt;')
                   .replace(/"/g, '&quot;')
                   .replace(/'/g, '&apos;');
    
                fix_extract = fix_extract.trim();console.log(fix_extract);
                var re = new RegExp(">"+escapeRegExp(extract.trim())+"<");
                str = str.replace(re,">"+fix_extract+"<");
                return str;
            }
    
            var fixed = "", final_fixed = "";
    
            function process(orig_str) {
                var newDOM = oParser.parseFromString(orig_str, "text/xml");
                var error = newDOM.getElementsByTagName("parsererror");
    
                if (error && error.length) {
                    if (error[0] && error[0].innerHTML) {
                        var err_html = error[0].innerHTML;
                        var parse_err = oParser.parseFromString(err_html, "text/html");
                        var err_log = parse_err.getElementsByTagName("div")[0].innerHTML;
                        console.log(err_log);
                        //var string = err_log.substring(err_log.lastIndexOf("line")+1, err_log.lastIndexOf("at"));
                        var regex = /line\s*(.*?)\s*at/g;
    
                        var matches = [];
                        while (m = regex.exec(err_log)) {
                          matches.push(m[1]);
                        }console.log(matches);
                        var err_line = matches[0];
                        fixed = remove_error(orig_str, err_line);
                        if (fixed) {console.log(fixed);//return;
                            process(fixed);
                        }
                        //console.log(fixed);
                        //alert('Invalid XML:' + err_log);
                    } else {
                        alert('XML could not be parsed');
                        return;
                    }
                    $('.welcome-page section.welcome .inner').html("<h3 class='text-center'>Invalid XML</h3>");
                } else {
                    final_fixed = orig_str;
                }
    
                if(final_fixed) {
                    return final_fixed;
                }
            }
    var newDOM = process(res[0][0]);
    
            if (!newDOM) {
                alert('XML could not be parsed');
                return;
            }
    
    var-oParser=new-DOMParser();
    函数escapeRegExp(str){
    返回str.replace(/[\-\[\]\/\{\\}(\)\*\+\?\.\\\^\$\\\\\\\\\\;]/g,“\$&”);
    }
    函数删除_错误(str,行){
    var alltext=str.split(“\n”);
    var非法=所有文本[第1行];
    
    var extract=非法。匹配(/>(.*)欢迎访问SO。请访问@mplungjan。您能指出这个问题的错误吗?请发布努力和代码-您尝试了什么?示例输入和示例输出失败?@mplungjan用我尝试过的内容编辑了我的问题。现在有什么帮助吗?请添加一个XML示例。单击并创建对SO的欢迎。请访问@mplungjan您能指出这个问题的错误吗?请发布努力和代码-您尝试了什么?示例输入和示例输出失败?@mplungjan用我尝试的内容编辑了我的问题。现在有什么帮助吗?请添加一个XML示例。单击,并创建一个感谢答案:)。解析为“text/html”会将所有标记转换为小写。例如,BackgroundCheck变为BackgroundCheck。有什么方法可以解决它吗?看看。也许我的解决方案适合您?它不是您真正需要解决问题的地方…PS:您可能需要执行
    。替换(/&/g),&;amp;)
    答案很棒。但是,我的一个XML字符串的节点CR-CRIMINAL恶作剧(<=$200)失败了。我想这是因为该值中有大括号()。或者$有特殊的正则表达式含义,需要转义。答案是:)。解析为“text/html”会将所有标记转换为小写。例如,BackgroundCheck变为BackgroundCheck。有什么方法可以解决它吗?看看。也许我的解决方案适合您?它不是您真正需要解决问题的地方…PS:您可能需要执行
    。替换(/&/g),&;amp;)
    回答得很好。但是,由于我的一个XML字符串包含节点CR-CRIMINAL恶作剧(<=$200),它失败了。我认为这是因为该值中有大括号()。或者$有一个特殊的regex含义,需要转义