以文本方式查看主题 - 中文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 |