以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  [求助]寻找如下节点应该如何用xpath表示?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=46497)


--  作者:cd_eat
--  发布时间:5/6/2007 9:58:00 PM

--  [求助]寻找如下节点应该如何用xpath表示?
<root>
<author loop="true">    
      <book loop="true">
    </book >
  </author >
<root>

如何找到有loop="true"属性,但祖先中没有loop="true"属性的节点,如上述author(实现不知道结点名)?


--  作者:wpdforever
--  发布时间:10/11/2007 4:11:00 PM

--  
testing case:
<?xml version="1.0"?>
<level1>
 <root name="r1">
    <author loop="true" name="a1">    
         <book loop="true"  name="b1"></book >
    </author >
 </root>
 <root name="r2">
    <author   name="a2">    
         <book loop="true"  name="b2">asdf</book >
    </author >
 </root>
 <root name="r3">
    <author  name="a3">    
         <book  name="b3">
          <book1 loop="true" name="b11"/>
         </book >
    </author >
 </root>
</level1>
-----------------------------------------------
<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
  <xsl:for-each select="//*[@loop='true']/parent::*[not(@loop='true')]">
    <xsl:text> </xsl:text>
    <xsl:value-of select="./@name"/>
  </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我也是刚刚学,你看看这个可以不,运行出来的结果是r1,a2,b3对应的节点
//*表示所有节点
//*[@loop='true']表示所有有@loop='true'属性的节点
//*[@loop='true']/parent::*表示上面的节点的父节点
然后排除父节点中有[@loop='true']属性的节点

祖先节点暂时不知道怎么弄,看看有没有帮助



--  作者:wpdforever
--  发布时间:10/11/2007 4:39:00 PM

--  
想了一下,祖先节点也可行
过滤条件为://*[@loop='true']/ancestor::*[not(@loop='true')]/child::*[@loop='true']
//*[@loop='true']/ancestor::*表示所有有loop属性的祖先节点
后面再过滤掉有loop属性的祖先节点和该节点的子节点
最后找那些子节点中有loop属性的节点

好像比较绕,有点错误,不过大致思想是这样子吧?


--  作者:teadrunk
--  发布时间:10/12/2007 11:14:00 AM

--  
*[@loop='true'][ancestor::*[not(@loop='true')]]
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms