我需要你的帮助,首先我开始使用代码:
bookmod.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<insystem>
<t>asdgas</t>
<b>asdgas</b>
</insystem>
<data>
<Data name="title">Everyday Italian</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2005</Data>
<Data name="price">30.00</Data>
</data>
</book>
<book category="CHILDREN">
<insystem>
<t>asdgas</t>
<b>asdgas</b>
</insystem>
<data>
<Data name="title">Potter Potter</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2003</Data>
<Data name="price">30.00</Data>
</data>
</book>
<book category="WEB">
<insystem>
<t>asdgas</t>
<b>asdgas</b>
</insystem>
<data>
<Data name="title">asdgasd Potter</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2005</Data>
<Data name="price">30.00</Data>
</data>
</book>
<book category="WEB">
<insystem>
<t>asdgas</t>
<b>asdgas</b>
</insystem>
<data>
<Data name="title">web book</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2005</Data>
<Data name="price">30.00</Data>
</data>
</book>
</bookstore>
的index.php
<!DOCTYPE html>
<html>
<body>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",dname,false);
try {xhttp.responseType="msxml-document"} catch(err) {} // Helping IE
xhttp.send("");
return xhttp;
}
var x=loadXMLDoc("bookmod.xml");
var xml=x.responseXML;
path="/bookstore/book/data/Data";
// code for IE
if (window.ActiveXObject || xhttp.responseType=="msxml-document")
{
xml.setProperty("SelectionLanguage","XPath");
nodes=xml.selectNodes(path);
for (i=0;i<nodes.length;i++)
{
document.write(nodes[i].childNodes[0].nodeValue);
document.write("<br>");
}
}
// code for Chrome, Firefox, Opera, etc.
else 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();
}
}
</script>
</body>
</html>
在路径中我也尝试: /书店/书/数据[数据= 2005] /数据[@名称= '年']
以及其他许多......
它基本上意味着XML文件非常大,我只需找到那些<data name="year">
== 2005
我尝试了许多方法和生成器,但仍然无法处理它:(
如果你能输入一个标题和作者,那就太好了。
编辑:
<book xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
我不知道为什么,但因为它不起作用
你知道解决这个问题的方法吗? 当我删除xmlns =“.....一切正常但我有它。
答案 0 :(得分:2)
以下XPath将从2005年中选择所有book
元素:
/bookstore/book[data/Data[@name='year' and .=2005]]
答案 1 :(得分:1)
以下xpath应基本上通过以下输入提供您所需的内容:
year
,title
,author
。
这有点像上下遍历。
/bookstore/book/data/Data[@name='year'][.='2005']/preceding-sibling::*[@name='title'][.='Everyday Italian']/following-sibling::*[@name='author'][.='Giada De Laurentiis']/parent::*
您可以将2005
,Everyday Italian
,Giada De Laurentiis
替换为您喜欢的输入。
它的工作方式是,它首先得到Data
year = 2005
然后得到它的前兄弟title
,author
然后匹配title
然后得到它的以下兄弟,其author
匹配给定输入,最后它的父级返回整个data
元素。
上述xpath的输出为:
'<data>
<Data name="title">Everyday Italian</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2005</Data>
<Data name="price">30.00</Data>
</data>'
输出不同的输入:2003
,Potter Potter
,Giada De Laurentiis
'<data>
<Data name="title">Potter Potter</Data>
<Data name="author">Giada De Laurentiis</Data>
<Data name="year">2003</Data>
<Data name="price">30.00</Data>
</data>'