我从服务器收到文本响应,看起来像<label><sometext>my Label</sometext></label>
。问题是当我执行jQuery.parseXML()
从此响应中创建xml文档时。最终创建<label><sometext>my Label</sometext></label>
。在解析xml时如何逃避这些尖括号?
答案 0 :(得分:1)
<
和>
是HTML实体,允许您在XML / HTML中打印小于(<
)和大于(>
)个字符类似的文档,不将它们解析为标记。
有两种方法可以解释您的问题,我不确定您的意思,所以我会尝试解决这两个问题:
您希望JQuery“忽略”已经转义的字符 - 这意味着JQuery应该将您的字符串解析为具有文本内容label
的{{1}}节点(请记住,"<sometext>my Label</sometext>"
将在解析的HTML中显示为<
,即
<
这几乎肯定是JQuery已经在做的事情。很难看到它,因为字符将打印相同,但您可以通过尝试以下来验证它:
label
|--- "<sometext>my Label</sometext>"
第三行将打印var result = $.parseXML("<label><sometext>myLabel</sometext></label>");
console.log(result);
console.log(result.children[0].textContent);
,即此字符串是"<sometext>myLabel</sometext>"
标记的文本内容,而不是另一个节点本身(如果是,它将显示在label
中)。
您希望JQuery将转义的字符视为标记标记 - 另一个选项是您 希望JQuery将result.children[0].children[0]
视为另一个XML节点,给出:
sometext
通过让服务器在字符串有效负载中发送未转义的字符,可以最好地解决这个问题。但另外你可以像这样替换字符串中的字符:
label
|---sometext
|---"my Label"
最后一行打印var string = "<label><sometext>myLabel</sometext></label>"
.replace(/&[l|g]t;/g, function(c) {
if (c === "<") {
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
而不是<
- 这将提供以下树:
<
要实现此目的,您可以再次使用函数替换字符:
label
|--- "<sometext>my Label</sometext>"
这里我们转义&符号var string = "<label><sometext>myLabel</sometext></label>".replace(/&[l|g]t;/g, function(c) {
if (c === "<") {
return "&lt;";
} else {
return "&gt;";
}
});
result = $.parseXML(string);
,以便实体不被识别为整体。