如何在javascript中从xml中检索数据。
data.xml中
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Lexical-Entry>
<Synset>
<Word val="aare"/>
<SynsetRelation>
<Relation att="iof" hypernym="thing" val="river"/>
</SynsetRelation>
<ID WordnetId="09186064" uw_id="1"/>
</Synset>
<Synset>
<Word val="aarhus"/>
<SynsetRelation>
<Relation att="iof" hypernym="thing" val="city"/>
<Relation att="equ" val="arhus"/>
</SynsetRelation>
<ID WordnetId="08762104" uw_id="2"/>
</Synset>
<Synset>
<Word val="aaron"/>
<SynsetRelation>
<Relation att="icl" hypernym="abstract_thing" val="name"/>
<Relation att="com" val="male"/>
<Relation att="nam" val="person"/>
</SynsetRelation>
<ID WordnetId="0" uw_id="3"/>
</Synset>
</Lexical-Entry>
的test.html
<html>
<body>
<div>
<h1>Search Word</h1>
<br/>
<input type="text" name="SearchValue" placeholder="Enter a word" />
<br/>
<br/>
<input type="submit" value="Search"/>
</div>
</body>
</html>
当用户输入单词以搜索ex:aaron时,它应该检索aaron synset的值。当用户输入单词时,它应该在data.xml中搜索该单词,然后检索aaron synset的值。
答案 0 :(得分:0)
未完全理解您的问题,但此代码从xml字符串中提取Synset
元素,其中Name
节点值为aaron
。
它应该让你知道如何获取你需要的东西。如果不是,那么发布更多关于你想要实现的方式和内容的代码。
var xml = '<?xml version="1.0" encoding="UTF-8" standalone="no"?><Lexical-Entry><Synset><Word val="aare"/><SynsetRelation><Relation att="iof" hypernym="thing" val="river"/></SynsetRelation><ID WordnetId="09186064" uw_id="1"/></Synset><Synset><Word val="aarhus"/><SynsetRelation><Relation att="iof" hypernym="thing" val="city"/><Relation att="equ" val="arhus"/></SynsetRelation><ID WordnetId="08762104" uw_id="2"/></Synset><Synset><Word val="aaron"/><SynsetRelation><Relation att="icl" hypernym="abstract_thing" val="name"/><Relation att="com" val="male"/><Relation att="nam" val="person"/></SynsetRelation><ID WordnetId="0" uw_id="3"/></Synset></Lexical-Entry>'
var parsedXml = (new window.DOMParser()).parseFromString(xml, 'text/xml')
var valueToLookFor = 'aaron';
var node = parsedXml.querySelector('Word[val="' + valueToLookFor +'"]').parentNode
答案 1 :(得分:0)
如果您重复使用this thread的代码,则可以实现它。
您获得<Word val="aaron"/>
的父节点。
以下代码是丑陋的,因为原来的代码是。所以我建议你完全重做自己,但你有这个想法。
Array.prototype.where = function(matcher) {
var result = [];
for (var i = 0; i < this.length; i++) {
if (matcher(this[i])) {
result.push(this[i]);
}
}
return result;
};
function getElementsByAttribute(tag, attr, attrValue) {
//Get elements and convert to array
var elems = Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
//Matches an element by its attribute and attribute value
var matcher = function(el) {
return el.getAttribute(attr) == attrValue;
};
return elems.where(matcher);
}
var elems = getElementsByAttribute('Word', 'val', 'aaron');
for(var i = 0; i < elems.length; i++) {
console.log(elems[i].parentNode);
// !!! HERE IS YOUR XML NODE -> elems[i] !!!
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Lexical-Entry>
<Synset>
<Word val="aare"/>
<SynsetRelation>
<Relation att="iof" hypernym="thing" val="river"/>
</SynsetRelation>
<ID WordnetId="09186064" uw_id="1"/>
</Synset>
<Synset>
<Word val="aarhus"/>
<SynsetRelation>
<Relation att="iof" hypernym="thing" val="city"/>
<Relation att="equ" val="arhus"/>
</SynsetRelation>
<ID WordnetId="08762104" uw_id="2"/>
</Synset>
<Synset>
<Word val="aaron"/>
<SynsetRelation>
<Relation att="icl" hypernym="abstract_thing" val="name"/>
<Relation att="com" val="male"/>
<Relation att="nam" val="person"/>
</SynsetRelation>
<ID WordnetId="0" uw_id="3"/>
</Synset>
</Lexical-Entry>