如何写这样的xpath,在线等待!

leizy 2003-10-20 02:06:41
有以下内容的xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a1>
<a2>
<b1>rrrrr</b1>
 <c1>
<d1>111</d1>
<d1>222</d1>
<d1>333</d1>
<d1>444</d1>

 </c1>
</a2>
<a2>
<b1>nnn</b1>
 <c1>
<d1>444</d1>
<d1>555</d1>
<d1>666</d1>
 </c1>
</a2>
<a2>
<b1>qqq</b1>
 <c1>
<d1>333</d1>
<d1>777</d1>
<d1>888</d1>
<d1>999</d1>
 </c1>
</a2>
</a1>

如何写一个xpath,把d1等于333的b1的内容列出来!
我这样写为什么不对
/a1/a2[c1/d1='333']/b1
...全文
36 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2003-10-21
  • 打赏
  • 举报
回复
a.xml
===================

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type='text/xsl' href='a.xsl'?>
<a1>
<a2>
<b1>rrrrr</b1>
 <c1>
<d1>111</d1>
<d1>222</d1>
<d1>333</d1>
<d1>444</d1>
 </c1>
</a2>
<a2>
<b1>nnn</b1>
 <c1>
<d1>444</d1>
<d1>555</d1>
<d1>666</d1>
 </c1>
</a2>
<a2>
<b1>qqq</b1>
 <c1>
<d1>333</d1>
<d1>777</d1>
<d1>888</d1>
<d1>999</d1>
 </c1>
</a2>
</a1>


a.xsl
================
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<xsl:for-each select="/a1/a2/b1[../c1/d1='333']">
<xsl:value-of select="."/><br/>
</xsl:for-each>
<hr/>
<xsl:for-each select="/a1/a2/b1[.='qqq' and ../c1/d1='333']">
<xsl:value-of select="."/><br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

leizy 2003-10-21
  • 打赏
  • 举报
回复
我可以列出b1等于某值的d1,
但找d1等于某值的b1如何列出?
surfw3() 你的方法我试了不行!
Mittermeyer(疾风之狼) 你的可能不对!

leizy 2003-10-21
  • 打赏
  • 举报
回复
为什么我用../c1/d1就不行,直接检索b1列b1可以,但检索d1列b1就不行?
surfw3 2003-10-21
  • 打赏
  • 举报
回复
根据d1='333'找b1就二个:
第一个是b1='rrrrr'
第二个是b1='qqq'

其实 /a1/a2[c1/d1='333']/b1 与 //b1[../c1/d1='333'] 找到的都是一样的,
就是上面二个.

不知leizy另有什么要求?
suhuoqiang 2003-10-20
  • 打赏
  • 举报
回复
right
dory 2003-10-20
  • 打赏
  • 举报
回复
right
surfw3 2003-10-20
  • 打赏
  • 举报
回复
c1和b1是兄弟节点
正确的path路径为 "//b1[../c1/d1='333']"

在此xml中满足条件的不止一个

<script language="javascript">
var objDom = new ActiveXObject("microsoft.xmldom");
objDom.async=false;
objDom.load("1.xml");
root=objDom.documentElement;
Nodes = root.selectNodes("//b1[../c1/d1='333']");
for(i=0;i<Nodes.length;i++)
alert(Nodes.item(i).text);
</script>
孟子E章 2003-10-20
  • 打赏
  • 举报
回复
right
Mittermeyer 2003-10-20
  • 打赏
  • 举报
回复
应该是
/a1/a2/b1[c1/d1='333']

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧