首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在xsl: value -of中使用什么表达式从某些元素中选择文本值

在xsl: value -of中使用什么表达式从某些元素中选择文本值
EN

Stack Overflow用户
提问于 2015-09-25 16:55:11
回答 2查看 2.7K关注 0票数 1

我有这样的XML结构,我需要打印出这两个段落所包含的内容。怎么做?基本上,我考虑的是每一个循环,但是在xsl:value中应该放入什么构造呢?谢谢!

代码语言:javascript
复制
   <slideshow>
        <slide id="A1">
            <title>XML techniques</title>
            <paragraph> Slideshow prepresents different kind of <bold>XML</bold> techniques </paragraph>
            <paragraph> Most common XML Techniques are </paragraph>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-25 16:59:19

假设您的XSLT看起来像

代码语言:javascript
复制
<xsl:for-each select="//paragraph">
  ???
</xsl:for-each>

你可以写:

代码语言:javascript
复制
<xsl:for-each select="//paragraph">
  <xsl:copy-of select="node()"/>
</xsl:for-each>

..。这将返回作为段落子节点的节点(文本和元素)的副本。

根据您拥有和想要执行的其他规则,您还可以编写:

代码语言:javascript
复制
<xsl:for-each select="//paragraph">
  <xsl:apply-templates select="node()"/>
</xsl:for-each>

..。这还会返回一个节点的副本--文本和元素--它们是段落的子节点,除非有其他模板覆盖该行为。

如果您只需要每个段落中的原始文本(即没有粗体标记),则可以使用value-of

代码语言:javascript
复制
<xsl:for-each select="//paragraph">
  <xsl:value-of select="."/>
</xsl:for-each>

如果这就是你要做的,你甚至可以写成:

代码语言:javascript
复制
<xsl:value-of select="//paragraph"/>

(注意:我举//段为例,因为没有提供上下文,但您可能希望浏览幻灯片并选择段落的子部分)。

票数 2
EN

Stack Overflow用户

发布于 2015-09-26 15:16:48

你写道:

基本上我考虑过每一个循环,

在处理节点时,很少需要xsl:for-each。使用xsl:apply-templates选择所需的节点。如果没有匹配的模板,默认情况下,这将显示节点(文本)的值:

代码语言:javascript
复制
<xsl:template match="slide">
    <!-- just process selection of children -->
    <xsl:apply-templates select="paragraph" />
</xsl:template>

<!-- add this in case you already have an identity template -->
<xsl:template match="paragraph">
    <!-- select only the immediate text children (without <b> for instance) -->
    <xsl:value-of select="text()" />
    <!-- OR: select the value, incl. all children (using "node()" is equiv.) -->
    <xsl:value-of select="." />
</xsl:template>

你还写道:

但是,在xsl:value-of construction中应该放什么呢?谢谢!

这在很大程度上取决于焦点。焦点通常由第一个祖先指令xsl:templatexsl:for-each设置。假设您的焦点是<slideshow>,则表达式如下:

代码语言:javascript
复制
<xsl:value-of select="slide/paragraph" />

如果焦点已经放在paragraph上,您可以使用select="text()" (选择所有文本子节点,但不是更深),或者使用select="." (选择当前节点,也接受子节点的值)。

但请参阅上文,以获得更有弹性的方法。使用apply-模板可以更容易地为更改和可维护性编写代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32787125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档