【问题标题】:XSL for <schema xmlns="http://www.w3.org/2001/XMLSchema"><schema xmlns="http://www.w3.org/2001/XMLSchema"> 的 XSL
【发布时间】:2011-05-09 11:23:44
【问题描述】:

&lt;schema xmlns="http://www.w3.org/2001/XMLSchema"&gt; 的等效 XSL 样式表是什么

【问题讨论】:

  • 显示您正在使用的代码。如果没有特定部件也能正常工作,你为什么要使用特定部件?

标签: xml xslt


【解决方案1】:

更新:OP提供了他的代码。

使用

<xsl:for-each select="x:schema/x:element">

代替

<xsl:for-each select="schema/element">

搜索/阅读“XPath 中的默认命名空间”。这是一个F A Q

这种转变

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="http://www.w3.org/2001/XMLSchema">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:value-of select="/x:schema/x:a/x:b/x:c"/>
 </xsl:template>
</xsl:stylesheet>

应用于此 XML 文档时

<schema xmlns="http://www.w3.org/2001/XMLSchema">
 <a>
  <b>
   <c>d</c>
  </b>
 </a>
</schema>

产生想要的结果

d

说明:XPath 表达式中的任何无前缀名称始终被视为“无命名空间”。如果 XML 文档具有默认命名空间,则该文档的任何元素都在默认命名空间中(不在“无命名空间”中)。因此,对于这样的文档,无前缀名称不要选择任何节点——因为在此文档位于“无命名空间”中。

【讨论】:

  • 我是 .to xml 和 xsl 的新手,如果我的理解有误,请纠正我
  • 我需要直接搜索元素而不是根?
  • 您当前的 XPath 表达式(带有添加到元素名称的前缀)是一个很好的表达式。既然您的问题已得到完全回答,并且您的代码也已更正,您必须接受此答案。
  • 不,它不起作用,我的 xml 如下 w3.org/2001/XMLSchema"....................> 和你的 xml 作为 xmlns:x 所以我们需要在 XSL 中使用上述 xml
  • @revenna:您是否将我在U P D A T E 中提出的代码更改应用于我的答案?如果你这样做了,你的代码就会像对我一样工作。仔细阅读我的回答——更新在最上面。
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多