以文本方式查看主题

-  中文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
比较方便的符合规范的校验xpath的方法是什么?
我现在用的是一个产品,和规范有些出入,有些功能没有提供。


--  作者: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
比如条件是
tag=66FE,value=160(这是一组)
tag=829D,value=80/10
两组条件同时符合的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