我有这样的事情:
<?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数据,我想选择一个具有特定值的单元格的Row。我该怎么做到这一点?这是什么xpath语法?
第二个问题: 我的xml数据大约是1.6米的代码行,从中选择数据需要很长时间,除了它的重量大约为80Mbs!如何使这个过程更有效并提高性能? p.n我使用下面的代码来检索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 :(得分:0)
回答问题的第一部分:
//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),但我没有个人经验。