以文本方式查看主题 - 中文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=12153) |
-- 作者:chiesa -- 发布时间:11/18/2004 3:09:00 PM -- [求助]XPATH 两个问题 1 /XMLDB/Photo[Name='Dsc_0001.nef'] 执行后得到正确的结果。 /XMLDB/Photo[//Name='Dsc_0001.nef'] 执行后只要有一个photo的name是正确的,他就将所有的photo都作为结果返回了,这是为什么呢? 2 |
-- 作者:doubleG -- 发布时间:11/18/2004 3:23:00 PM -- /XMLDB/Photo[Name='Dsc_0001.nef']中的[Name='Dsc_0001.nef']是指Photo的子元素Name的值为'Dsc_0001.nef'时是真,取这样Photo元素。 但是[//Name='Dsc_0001.nef']//表示只要是根节点下的,那么只要含有这样的元素就是真,除非不含有。那么只要XML文件中含有这样的节点,自然这个判断就是一直是真,当然全部都取出来啊。 你和W3C标准对照一下,很容易明白的。 |
-- 作者:chiesa -- 发布时间:11/18/2004 3:33:00 PM -- //表示的是根节点阿?我还以为是表示photo下的所有节点来。 如果我要找photo所有子元素里含有Name的值为'Dsc_0001.nef'的,应该怎么改阿? |
-- 作者:doubleG -- 发布时间:11/18/2004 4:38:00 PM -- /XMLDB/Photo/child::*[Name='Dsc_0001.nef'] 就是所有photo下面的含有Name为'Dsc_0001.nef'的元素 |
-- 作者:chiesa -- 发布时间:11/18/2004 4:58:00 PM -- 这样就可以了吗?多层的也能找出来吗?我本来想用descendant轴的,呀呀的,那个东西竟然不支持地说。就支持这3个「child」「attribute」「self」 我用你这个一个结果也没有找到,有什么地方不对吗? |
-- 作者:chiesa -- 发布时间:11/18/2004 5:06:00 PM -- 现在我主要的问题是想找多层,可是又不支持那个轴,应该怎么办呢? |
-- 作者:doubleG -- 发布时间:11/18/2004 5:06:00 PM -- 你把你的xml放出来,然后说明要什么结果,我给你写一个事例。 |
-- 作者:chiesa -- 发布时间:11/18/2004 5:23:00 PM -- <?xml version="1.0" encoding="Shift_JIS"?> <XMLDB> <Photo> <Name>Dsc_0001.nef</Name> <IFD0th> <Offset>00000008</Offset> <Entry> <Tag>66FE</Tag> <Type>4</Type> <Size>1</Size> <Value>160</Value> </Entry> <Entry> <Tag>0100</Tag> <Type>4</Type> <Size>1</Size> <Value>160</Value> </Entry> <SubIFD> <Offset>0000E5F8</Offset> <Entry> <Tag>0100</Tag> <Type>4</Type> <Size>1</Size> <Value>2012</Value> </Entry> <Entry> <Tag>9217</Tag> <Type>3</Type> <Size>1</Size> <Value>2</Value> </Entry> </SubIFD> <Entry> <Tag>0214</Tag> <Type>5</Type> <Size>6</Size> <Value> <V0>0/1</V0> <V1>1/255</V1> <V2>255/1</V2> <V3>1/0</V3> <V4>0/1</V4> <V5>1/255</V5> </Value> </Entry> <ExifIFD> <Offset>00000210</Offset> <Entry> <Tag>829A</Tag> <Type>5</Type> <Size>1</Size> <Value>10/7500</Value> </Entry> <Entry> <Tag>829D</Tag> <Type>5</Type> <Size>1</Size> <Value>80/10</Value> </Entry> <MakerNote> <Offset>0000033E</Offset> <Entry> <Tag>0001</Tag> <Type>7</Type> <Size>4</Size> <Value>30313030</Value> </Entry> <Entry> <Tag>0002</Tag> <Type>3</Type> <Size>2</Size> <Value> <V0>0</V0> <V1>200</V1> </Value> </Entry> </MakerNote> </ExifIFD> </IFD0th> </Photo> </XMLDB> 我截了一段,就是要根据tag和value的值对,找到对应的photo
|
-- 作者:chiesa -- 发布时间:11/18/2004 5:25:00 PM -- 其中的SubIFD,MakerNote之类的层次是不固定的,所以我想用找所有层次子元素的方法 |
-- 作者:doubleG -- 发布时间:11/18/2004 5:41:00 PM -- Try this: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <xsl:for-each select="XMLDB/Photo[./descendant::Tag[text()='66FE' and following-sibling::value[text()='160' ]] and ./descendant::Tag[text()='829D' and following-sibling::value[text()='80/10' ]]]"> <xsl:value-of select="Name"/> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
-- 作者:doubleG -- 发布时间:11/18/2004 5:56:00 PM -- 哦 不好意思 我没有看到你不支持这些轴,如果不支持的话就很难办了,那就要去遍历,效率会降低很多的。 |
-- 作者:chiesa -- 发布时间:11/18/2004 5:58:00 PM -- 可以出来,不过我不是要直接在页面显示,用的第三方工具,那个东西descendant不支持,如果还有其他的好方法要记得告诉我啊,今天真是麻烦你了,非常感谢,让我学到了不少知识。^-^ |
-- 作者:doubleG -- 发布时间:11/18/2004 6:18:00 PM -- OK,不用那个轴也可以,这样试试: <xsl:for-each select="XMLDB/Photo[.//Tag[text()='66FE' and ../value[text()='160']] and .//Tag[text()='829D' and ../value[text()='80/10']] ]"> <xsl:value-of select="Name"/> </xsl:for-each> 当然text()用.替代也是可以的 |
-- 作者:chiesa -- 发布时间:11/18/2004 6:34:00 PM -- 明天再来试^-^,谢谢 |
-- 作者:chiesa -- 发布时间:11/19/2004 12:05:00 PM -- <xsl:for-each select="XMLDB/Photo[.//Entry[Tag='66FE' and Value='160'] and .//Entry[Tag='829D' and Value='80/10']]"> 改成这样就可以了,那个东西..都不支持,呵呵。谢谢啦 |
-- 作者:巧克力 -- 发布时间:12/13/2004 8:50:00 PM -- 你的问题解决了吗?,如果没有,来信告诉我。 四两拨千斤-巧克力 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
101.563ms |