如何在命名空间中选择xml元素?

时间:2013-02-06 12:38:58

标签: asp.net html xslt namespaces

我正在尝试理解这个xslt。

以下xslt命令完全选择了什么?什么是“跟随兄弟”,“aic”和“pstyle”?

“aic”似乎是命名空间。

下面的xslt使用什么xml输入?

<xsl:stylesheet exclude-result-prefixes="aic" 
    version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aic="http://ns.adobe.com/AdobeInCopy/2.0/" >

<xsl:template match="/">

    <xsl:value-of select="following-sibling::aic:pstyle"/>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

following-sibling::aic:pstyle
  • following-sibling,表示查找节点的“方向”,在这种情况下,它查看文档顺序中当前上下文节点之后的节点但是与当前节点共享同一父节点。如果未指定轴,则默认为child,它将查找当前上下文节点的子节点。

  • aic:pstyle是一个选择器,用于查找元素,其本地名称为pstyle,其名称空间URI为http://ns.adobe.com/AdobeInCopy/2.0/(映射的那个)到样式表中的前缀aic

源XML不需要使用相同的前缀,例如表达式将匹配看起来像

的元素
<pstyle xmlns="http://ns.adobe.com/AdobeInCopy/2.0/">

<foo:pstyle xmlns:foo="http://ns.adobe.com/AdobeInCopy/2.0/">

在原始XML中。

正如JLRis指出的那样,如果当前上下文是文档节点/,则此特定XPath将不匹配任何内容,因为表达式有意义,它必须在当前节点为的上下文中执行元素(或注释,处理指令或文本节点)至少两个级别,即文档元素的子级或更深层次。

<example xmlns="http://ns.adobe.com/AdobeInCopy/2.0/">
  <pstyle id="1"/>
  <foo/>
  <pstyle id="2"/>
  <pstyle id="3"/>
</example>

如果使用foo元素作为上下文节点执行,则表达式将选择pstyle元素2和3,但不选择1。