通过属性值获取元素 [英] get elements by attribute value
问题描述
我通过 webservices
在 Javascript
发送请求,我收到的响应是这样的: p>
I am sending a request via webservices
in Javascript
and the response i am receiving is like this:
<ListOfBook>
<Book>
<Id>ACIA-11QWTKX</Id>
<ListOfBookUser recordcount="0" lastpage="true">
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-ANC0CC</Id>
<ListOfBookUser recordcount="1" lastpage="true">
<BookUser>
<BookId>ACIA-ANC0CC</BookId>
<BookName>TKSP_GLOBAL</BookName>
</BookUser>
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-ANC0CF</Id>
<ListOfBookUser recordcount="0" lastpage="true">
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-EUMCH5</Id>
<ListOfBookUser recordcount="1" lastpage="true">
<BookUser>
<BookId>ACIA-EUMCH5</BookId>
<BookName>TKSP_MADRID_CENTRO_SUR</BookName>
</BookUser>
</ListOfBookUser>
</Book>
如你所见,有一些元素具有
,还有其他没有这个孩子的元素。< BookUser>
的小孩>
As you can see there are some elements of <Book>
that have a child <BookUser>
and there are other elements that doesn't have this child.
我需要一种方法来提取具有< BookUser> $ c的
< Book>
$ c> child with 正则表达式
, DOM
或 Xpath
。任何建议?
I need a way to extract elements of <Book>
that have the <BookUser>
child with regular expressions
, DOM
or Xpath
. Any suggestions please ?
推荐答案
您可以使用XPath与 // Book [ListOfBookUser / BookUser ]
:
You can use XPath with an expression like //Book[ListOfBookUser/BookUser]
:
var xmlMarkup = `<ListOfBook>
<Book>
<Id>ACIA-11QWTKX</Id>
<ListOfBookUser recordcount="0" lastpage="true">
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-ANC0CC</Id>
<ListOfBookUser recordcount="1" lastpage="true">
<BookUser>
<BookId>ACIA-ANC0CC</BookId>
<BookName>TKSP_GLOBAL</BookName>
</BookUser>
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-ANC0CF</Id>
<ListOfBookUser recordcount="0" lastpage="true">
</ListOfBookUser>
</Book>
<Book>
<Id>ACIA-EUMCH5</Id>
<ListOfBookUser recordcount="1" lastpage="true">
<BookUser>
<BookId>ACIA-EUMCH5</BookId>
<BookName>TKSP_MADRID_CENTRO_SUR</BookName>
</BookUser>
</ListOfBookUser>
</Book>
</ListOfBook>`;
var xmlDoc = new DOMParser().parseFromString(xmlMarkup, 'application/xml');
var bookSnapshot = xmlDoc.evaluate('//Book[ListOfBookUser/BookUser]', xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0, l = bookSnapshot.snapshotLength; i < l; i++) {
var book = bookSnapshot.snapshotItem(i);
var id = xmlDoc.evaluate('Id', book, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (id != null) {
console.log(id.textContent);
}
}
为了简洁起见, -line字符串文字分隔符仅在实际的浏览器中实现,但在Mozilla,Chrome,Safari和Edge中的DOM实现中支持XPath API。
For brevity of the sample, I have used the multi-line string literal delimiters `` only implemented in actual browsers, but the XPath API is supported in DOM implementations in Mozilla, Chrome, Safari and Edge.
这篇关于通过属性值获取元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!