以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请问:如何能将XML内某属性的内容作为select的value  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=36446)


--  作者:olgeer
--  发布时间:8/5/2006 6:02:00 PM

--  请问:如何能将XML内某属性的内容作为select的value
XML格式如下:
<result totalrow="3" keycolumn="user_id">
 <record rownum="1">
  <user_id>1</user_id>
  <user_name>admin</user_name>
  <user_psw>admin</user_psw>
  <user_face></user_face>
  <isdel>0</isdel>
 </record>
 <record rownum="2">
  <user_id>2</user_id>
  <user_name>guest</user_name>
  <user_psw>guest</user_psw>
  <user_face></user_face>
  <isdel>0</isdel>
 </record>
</result>
现在我想根据上面的keycolumn的值来取相应的record内的某个keycolumn指定的值。
例如:keycolumn是user_id,那么就取user_id的value,如果keycolumn是user_face则取user_face的值。
另外说明的是,keycolumn内的值不可预料,不仅仅是上面结构内的值,而结构可能也会不一样。请问有什么好方法吗? 急!
--  作者:Qr
--  发布时间:8/7/2006 10:44:00 AM

--  
看看是不是你要的:
<root>
<result totalrow="3" keycolumn="user_id">
<record rownum="1">
  <user_id>1</user_id>
  <user_name>admin</user_name>
  <user_psw>admin</user_psw>
  <user_face></user_face>
  <isdel>0</isdel>
</record>
<record rownum="2">
  <user_id>2</user_id>
  <user_name>guest</user_name>
  <user_psw>guest</user_psw>
  <user_face></user_face>
  <isdel>0</isdel>
</record>
</result>
<result totalrow="3" keycolumn="user_face">
<record rownum="1">
  <user_id>1</user_id>
  <user_name>admin</user_name>
  <user_psw>admin</user_psw>
  <user_face>tt</user_face>
  <isdel>0</isdel>
</record>
<record rownum="2">
  <user_id>2</user_id>
  <user_name>guest</user_name>
  <user_psw>guest</user_psw>
  <user_face>ff</user_face>
  <isdel>0</isdel>
</record>
</result>
</root>


<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
 <xsl:apply-templates select="//result" />
</xsl:template>

<xsl:template match="result[@keycolumn='user_id']">
 <xsl:element name="select">
  <xsl:attribute name="name">s1</xsl:attribute>
  <xsl:apply-templates select="record" />
 </xsl:element>
</xsl:template>
<xsl:template match="result[@keycolumn='user_face']">
 <xsl:element name="select">
  <xsl:attribute name="name">s2</xsl:attribute>
  <xsl:apply-templates select="record" />
 </xsl:element>
</xsl:template>

<xsl:template match="record[../@keycolumn='user_id']">
 <xsl:element name="option">
  <xsl:attribute name="value"><xsl:value-of

select="record/user_id"/></xsl:attribute>
  <xsl:value-of select="user_id"/>
 </xsl:element>
</xsl:template>
<xsl:template match="record[../@keycolumn='user_face']">
 <xsl:element name="option">
  <xsl:attribute name="value"><xsl:value-of

select="record/user_face"/></xsl:attribute>
  <xsl:value-of select="user_face"/>
 </xsl:element>
</xsl:template>

</xsl:stylesheet>
以上不是最好的方法,不过看懂了,自己完善代码应该没问题。


--  作者:olgeer
--  发布时间:8/8/2006 2:11:00 PM

--  
谢谢你的指导,单这种方法只能对已知结构的XML进行处理,但我的XML结构是跟数据表结构的,所以无法预知名称,只能按keycolumn的值取,能做成动态的吗?
--  作者:Qr
--  发布时间:8/9/2006 12:39:00 PM

--  
用递归,先取keycolumn的值赋给变量,然后在[@keycolumn='$变量名'],这样就不必把代码写死了。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
54.688ms