在Javascript或JQuery中解析类似HTML的字符串

在Javascript或JQuery中解析类似HTML的字符串,javascript,jquery,regex,string,Javascript,Jquery,Regex,String,我有一根这样的绳子 string = "<user>username 1<notes>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>" 这是一个例子。如果您使用的是HTML可解析XML(如上所示),那么使用jQuery很简单 string=“username 1username

我有一根这样的绳子

string = "<user>username 1<notes>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>"
这是一个例子。如果您使用的是HTML可解析XML(如上所示),那么使用jQuery很简单

string=“username 1username 1Notes of User 1 username 2Notes of User 2”;
变量节点=$(“”+字符串+“”);
警报(node.find('notes').text());
node.attachTo(document.body)//附加到dom?
这里有一个例子。如果您使用的是HTML可解析XML(如上所示),那么使用jQuery很简单

string=“username 1username 1Notes of User 1 username 2Notes of User 2”;
变量节点=$(“”+字符串+“”);
警报(node.find('notes').text());
node.attachTo(document.body)//附加到dom?

您是指类似XML的字符串,而不是类似HTML的字符串。jQuery有一个可爱的XML解析器

您指的是类似XML的字符串,而不是类似HTML的字符串。jQuery有一个可爱的XML解析器,用于识别user1或user2的注释,您需要稍微更改XML

string = "<user>username 1<notes id='user1'>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>"
这是小提琴


在-1之后编辑:(


不,jQuery选择器不解析XML。 这可能有时会起作用,但它无效且依赖于浏览器

下面是
parseXML
方法:

 xmlDoc = $.parseXML(string),
    $xml = $(xmlDoc),
    $title = $xml.find("notes[id='user1']").text();

alert($title); 

要识别user1或user2的注释,您需要稍微更改xml

string = "<user>username 1<notes id='user1'>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>"
这是小提琴


在-1之后编辑:(


不,jQuery选择器不解析XML。 这可能有时会起作用,但它无效且依赖于浏览器

下面是
parseXML
方法:

 xmlDoc = $.parseXML(string),
    $xml = $(xmlDoc),
    $title = $xml.find("notes[id='user1']").text();

alert($title); 

我宁愿采用这种方法

var xml = "<user>username 1<notes>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>";

function FindNotesByUserName(uName) {
    var node = $('<div/>').html(xml);
    return node.find(":contains('" + uName + "')").closest("user").find("notes").text();
}

var desiredNotes = FindNotesByUserName("username 2");
var xml=“用户名1用户1的注释用户名2用户2的注释”;
函数FindNotesByUserName(uName){
var节点=$('').html(xml);
return node.find(“:contains(““+uName+”)”))。最近的(“user”)。find(“notes”).text();
}
var desiredNotes=FindNotesByUserName(“用户名2”);

注:这是ghayes所做的一个小改动。只是为了满足OP的要求。

我宁愿采用这种方法

var xml = "<user>username 1<notes>Notes of User 1</notes></user> <user>username 2<notes>Notes of User 2</notes></user>";

function FindNotesByUserName(uName) {
    var node = $('<div/>').html(xml);
    return node.find(":contains('" + uName + "')").closest("user").find("notes").text();
}

var desiredNotes = FindNotesByUserName("username 2");
var xml=“用户名1用户1的注释用户名2用户2的注释”;
函数FindNotesByUserName(uName){
var节点=$('').html(xml);
return node.find(“:contains(““+uName+”)”))。最近的(“user”)。find(“notes”).text();
}
var desiredNotes=FindNotesByUserName(“用户名2”);


注:这是ghayes所做的一个小改动。只是为了满足OP要求。

FWIW,看起来非常像XML。FWIW,看起来非常像XML。这将获取两个用户的注释不解析XML。这有时似乎有效,但它无效。我们确定这是XML吗?您的假设很好,但与给出的事实不完全一致。+1 ghayes@Tomalak Geret'kal:我认为您有点不公平。ghayes试图将字符串作为不存在的div的html的一部分,并且$将解析DOM,he然后可以解析它。我也很好奇如何使用
$来解决这个问题。parseXML
@naveen:我一点也不“不公平”。正如我所说,jQuery
$()
解析HTML,而不是XML。最后我检查,
都不是有效的HTML标记。这将获取用户的注释jQuery
$()
不解析XML。这有时似乎有效,但它无效。我们确定这是XML吗?您的假设很好,但与给出的事实不完全一致。+1 ghayes@Tomalak Geret'kal:我认为您有点不公平。ghayes试图将字符串作为不存在的div的html的一部分,并且$将解析DOM,h然后e就可以解析它了。我也想看看如何使用
$来解决这个问题。parseXML
@naveen:我一点也不“不公平”。正如我所说,jQuery
$()
解析HTML,而不是XML。我上一次检查时发现,
是无效的HTML标记。不,jQuery选择器不解析XML。这可能有时会起作用,但它无效且依赖于浏览器。这与
id='user1'
有什么关系?这似乎是一种简单的方法,我想知道是否有一种不添加为每个便笺添加一个额外的id标记,或者可能通过类名,原因是每个便笺可以与多个用户关联。例如,一个便笺可以与用户1、2和3关联。不,jQuery选择器不解析XML。这可能有时看起来有效,但它无效且依赖于浏览器。如何
id='user1'
相关这里?这似乎是一个简单的方法,我想知道是否有一种方法可以做到这一点,而无需向每个注释添加额外的id标记,或者可能通过类名,原因是每个注释都可以与多个用户关联。例如,一个注释可以与用户1、2和3关联。我喜欢竖起大拇指,但请注意,标准HTML解析器可以解析上面列出的字符串。这个问题还没有完全解决,不能说这是唯一正确的答案。你完全正确。但是我认为这显然是XML,因此应该使用合适的解析器。最新的HTML5规范没有指定用户或注释的标记。我也不鼓励使用为数据建模时使用f HTML而不是XML。@ghayes:“标准HTML解析器可以解析上面列出的字符串”。实际上,任何解析该字符串的能力都是显式的,本质上是非标准的。我很喜欢这种做法,但请注意,标准HTML解析器可以解析上面列出的字符串。问题还没有完全解决,不能说这是唯一正确的答案。你完全正确。不过,我认为这显然是XML,因此应该使用合适的解析器。最新的HTML5规范没有指定用户或注释的标记。我也不鼓励在数据建模时使用HTML而不是XML的概念。@ghayes:“标准HTML解析器可以解析上面列出的字符串”。实际上,解析该字符串的任何功能都是显式的,本质上是非标准的。