以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  返回祖先结点  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=75349)


--  作者:chll
--  发布时间:6/12/2009 7:28:00 AM

--  返回祖先结点
我现在在转换一个xml文档,因为要根据节点的下几级子节点的属性来为目标文档添加元素,所以需要在判断完条件后再回到此跟节点,这个怎么能实现?请各位高手解答一下,谢谢
--  作者:Qr
--  发布时间:6/12/2009 1:21:00 PM

--  
祖先结点(ancestor::*)和根节点(/)不同,你到底要返回哪里?
--  作者:chll
--  发布时间:6/14/2009 9:25:00 AM

--  
返回某一祖先节点,不是根节点
--  作者:chll
--  发布时间:6/14/2009 10:43:00 AM

--  
源xml(主体部分,其余省略)
<root>
    <A>
           <B name="b1">
                 <C name="c1" >
                      <D type="d1">
                      </D>
                 </C>
                 <C name="c2" type="ctype">
                      <D type="d2">
                      </D>
                 </C>
           </B>
           <B name="b2">
                <C name="c3" >
                      <D type="d3">
                      </D>
                 </C>
                 <C name="c4" type="ctype">
                      <D type="d2">
                      </D>
                 </C>
           </B>
    </A>           
</root>


--  作者:chll
--  发布时间:6/14/2009 10:54:00 AM

--  
xslt(主体部分,其余省略)
<xsl:templete match="/">
   <xsl:for-each select="//B">
      <xsl:for-each select="C">
          <xsl:if test="//D[@type='d1']">
               <xsl:for-each="..">
                  <xsl:for-each select="C[@type='ctype']">
                     <xsl:variable name="tname">
                         <xsl:value-of select="name"/>
                     </xsl:variable>
                     <xsl:element name="name">
                        <xsl:value-of select="$tname"/>
                     </xsl:element>
                  </xsl:for-each>
              </xsl:for-each>
         </xsl:if>
      </xsl:for-each>
   </xsl:rof-each>
</xsl:templete>


--  作者:chll
--  发布时间:6/14/2009 10:59:00 AM

--  
希望输出的结果为:
<name>c2</name>
用上面的xslt转换的结果为:
<name>c2</name>
<name>c2</name>
为什么是输出了两次呢?我的本意是如果B的孙子节点中有D的type属性为d1,则返回到当前节点C的父节点B,然后输出B的子节点中type属性值为ctype的C节点的name属性,并作为新添加的name元素的内容。
--  作者:chll
--  发布时间:6/14/2009 11:09:00 AM

--  
或者问题这么描述,我要根据B节点的孙子节点D的type属性(是不是d1)判断,如果是d1,则遍历并输出除这个D节点的父节点C之外的其它C节点,如果不是,则什么都不做
--  作者:chll
--  发布时间:6/14/2009 11:54:00 AM

--  
各位高手麻烦回答一下这个问题
--  作者:chll
--  发布时间:6/16/2009 6:51:00 AM

--  
我想返回到当前节点的某一父节点并取出某一属性值作为当前节点的属性,能不能不用for-each实现返回,因为我发现经常会导致重复输出相同内容多次
--  作者:hexun831012
--  发布时间:6/16/2009 4:50:00 PM

--  
../
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms