gpt4 book ai didi

javascript - jQuery.parseXML() 中的转义尖括号

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:44 26 4
gpt4 key购买 nike

我从服务器收到一条文本响应,看起来像 <label>&lt;sometext&gt;my Label&lt;/sometext&gt;</label> 。问题是当我执行 jQuery.parseXML() 时根据此响应创建 xml 文档。它最终创建 <label><sometext>my Label</sometext></label> 。在解析 xml 时如何转义这些尖括号?

最佳答案

&lt;&gt;是 HTML 实体,允许您在类似 XML/HTML 的文档中打印小于 ( < ) 和大于 ( > ) 字符,而无需将它们解析为标签。

有两种方法可以解释您的问题,但我不确定您的意思,所以我会尝试解决这两种问题:

  1. 您希望 JQuery“忽略”已经转义的字符 - 这意味着 JQuery 应该将您的字符串解析为 label具有文本内容的节点 "<sometext>my Label</sometext>" (请记住,&lt; 将在解析后的 H​​TML 中显示为 <),即

    label
    |--- "<sometext>my Label</sometext>"

这几乎肯定是 JQuery 已经在做的事情。很难看到它,因为字符将打印相同,但您可以通过尝试以下操作来验证它:

var result = $.parseXML("<label>&lt;sometext&gt;myLabel&lt;/sometext&gt;</label>");
console.log(result);
console.log(result.children[0].textContent);

第三行将打印 "<sometext>myLabel</sometext>" ,即该字符串是您的 label 的文本内容标签而不是另一个节点本身(如果是,它将显示在 result.children[0].children[0] 中)。

  • 您希望 JQuery 将转义字符视为标记标记 - 另一个选项是您确实希望 JQuery 考虑 sometext作为另一个 XML 节点,给出:

    label
    |---sometext
    |---"my Label"
  • 最好的解决方法是让服务器发送字符串有效负载中的未转义字符。但您也可以像这样替换字符串中的字符:

    var string = "<label>&lt;sometext&gt;myLabel&lt;/sometext&gt</label>"
    .replace(/&[l|g]t;/g, function(c) {
    if (c === "&lt;") {
    return "<";
    } else {
    return ">";
    }
    });

    var result = $.parseXML(string);
    console.log(result);
    console.log(result.children[0]);
    console.log(result.children[0].children[0].textContent);

    最后一行打印 my Label ,表明sometext确实被解析为父节点。

    编辑:只是想到了第三种解释

  • 您希望能够按字面显示转义字符,即 &lt;而不是< - 这将给出以下树:

    label
    |--- "&lt;sometext&gt;my Label&lt;/sometext&gt;"
  • 要实现此目的,您可以再次使用函数来替换字符:

    var string = "<label>&lt;sometext&gt;myLabel&lt;/sometext&gt;</label>".replace(/&[l|g]t;/g, function(c) {
    if (c === "&lt;") {
    return "&amp;lt;";
    } else {
    return "&amp;gt;";
    }
    });

    result = $.parseXML(string);

    在这里我们转义了 & 符号 &这样该实体就不会被视为一个整体。

    关于javascript - jQuery.parseXML() 中的转义尖括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051031/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com