选择具有特定价值

问题描述:

一个子节点的特定节点我有这样的事情:选择具有特定价值

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Row> 
    <Cell>some value</Cell> 
    <Cell>some value</Cell> 
    ... continues with around 800 other Cells 
    </Row> 
    ...continues with around 2000 other Rows 

第一个问题: 通过使用XPath选择XML数据,我要选择具有行具有特定值的单元格。我怎么能做到这一点?这是什么xpath语法?

第二个问题: 我的XML数据是各地的1.6M码和选择数据线从它需要很长的时间,除了一个事实,即它重约80Mbs!我怎样才能使这个过程更有效,提高性能? PN我用下面的代码来检索XML数据:

function loadXMLDoc(dname) 
{ 
    xhttp=new XMLHttpRequest(); 
    xhttp.open("GET", dname ,false); 
    xhttp.send(""); 
    return xhttp; 
} 

var x=loadXMLDoc("data/data.xml"); 
var xml=x.responseXML; 
path="some path"; 
if (document.implementation && document.implementation.createDocument) 
{ 
    var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null); 
    var result=nodes.iterateNext(); 

    while (result) 
    { 
     document.write(result.childNodes[0].nodeValue); 
     document.write("<br>"); 
     result=nodes.iterateNext(); 
    } 
} 
+0

xpath'//Cell[.==some value']'应该检索具有文本内容的单元格作为'some value'的节点 – SomeDude

+0

@svasa,但是这只能选择具有该值的单元格。我想选择它的父母!有没有办法做到这一点 ? –

+0

是的。 ''//Cell[.='some value']/..'会给父节点'行' – SomeDude

回答你的问题的第一部分:

//row[./cell/text() = '3'] 

应用此XPath表达式以下XML

<root> 
    <row> 
    <cell>1</cell> 
    <cell>2</cell> 
    </row> 
    <row> 
    <cell>3</cell> 
    <cell>4</cell> 
    </row> 
</root> 

产生以下输出:

> xmllint -xpath "//row[./cell/text() = '3']" test.xml 
<row> 
    <cell>3</cell> 
    <cell>4</cell> 
</row> 

至于你的问题的第二部分,问题在于为这样一个大文档构建完整的DOM是非常昂贵的。所以你需要考虑事件驱动的解析(SAX,见https://en.wikipedia.org/wiki/Simple_API_for_XML),但我没有亲身经历。

+0

谢谢!顺便说一下,你认为XPath是我可以从JavaScript检索XML数据的最佳方式吗? –

+0

@MehdiJorJor对不起,我没有太多的Javascript经验。 – Markus