以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  检验xml元素的属性(属性带有命名空间)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=20660)


--  作者:liulm_142
--  发布时间:7/24/2005 7:09:00 PM

--  检验xml元素的属性(属性带有命名空间)
有下面的xml
-------------------------------------------------------------
<?xml version=1.0?>
<Hello xmlns:xd="www.w3c.org">
      <man xd:name="zhao" xd:gender="male">first</man>
      <man age="22">second</man>
      <man xd:name="zhao">third</man>
       <!-- 下面还有,但是并不一定每个man元素都有带命名空间的属性  -->
</Hello>
------------------------------------------------------------
现在用xslt把该xml进行转化,要求就是:如果man元素有"xd:name"属性且值为"zhao",那么就将该元素的标记man转化为<woman>,其余的都不变。因此,上面的xml转化为新的xml为:
------------------------------------------------------------
<?xml version=1.0?>
<Hello xmlns:xd="www.w3c.org">
      <woman xd:name="zhao" xd:gender="male">first</woman>
      <man age="22">second</man>
      <woman xd:name="zhao">third</woman>
       <!-- 下面还有,但是并不一定每个man元素都有带命名空间的属性  -->
</Hello>
------------------------------------------------------------
我自己在做的时候,关键是无法获得带有命名空间的属性,如在<xsl:when>的test属性中不能做这样的判断:<xsl:when test="name()='man' and @xd:name='zhao' ">会报错,错误为”XPath无效“。
因此,主要的问题是如何获取带有命名空间的属性。
--  作者:liulm_142
--  发布时间:7/25/2005 4:12:00 PM

--  
看来大家都没有遇见这样的问题。昨天晚上看到了一本书上提到的解决方法。如果在xml中用到了命名空间前缀,那么在xsl中要查找的时候必须添加相应的命名空间。即是说在xslt的根元素中先声明xml中同样的命名空间,本例中要求在xslt中声明xmlns:xd="www.w3c.org"命名空间,接下来就可以用如下方法验证man元素是否存在xd:name="zhao"属性了:<xsl:when test="name()='man' and @xd:name='zhao'">

--  作者:naive_1010
--  发布时间:9/4/2008 9:49:00 PM

--  
不错!谢谢分享!!顶一下
--  作者:宇义
--  发布时间:9/4/2008 10:19:00 PM

--  
也可以用namespace-uri()取得节点的namespace uri进行判断,当然麻烦了点。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
37.109ms