Xml 使用哪个表达式从某些元素中选择文本值

Xml 使用哪个表达式从某些元素中选择文本值,xml,xslt,value-of,Xml,Xslt,Value Of,我有这种XML结构,我需要打印出两个段落部分包含的内容。怎么做?基本上我考虑了每个循环,但是在xsl:value-of-construction中应该放些什么呢?谢谢 <slideshow> <slide id="A1"> <title>XML techniques</title> <paragraph> Slideshow prepresents different

我有这种XML结构,我需要打印出两个段落部分包含的内容。怎么做?基本上我考虑了每个循环,但是在xsl:value-of-construction中应该放些什么呢?谢谢

   <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>

假设您的XSLT看起来像

<xsl:for-each select="//paragraph">
  ???
</xsl:for-each>
如果这就是你所做的,你甚至可以这样写:

<xsl:value-of select="//paragraph"/>

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

假设您的XSLT看起来像

<xsl:for-each select="//paragraph">
  ???
</xsl:for-each>
如果这就是你所做的,你甚至可以这样写:

<xsl:value-of select="//paragraph"/>
注意:我以//段落为例,因为没有提供上下文,但您可能希望浏览幻灯片并选择段落子项。

您写道:

基本上我考虑了每个循环

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

<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>
如果焦点已经在段落上,可以使用select=text选择所有文本子项,但不能更深,或者select=。选择当前节点,同时获取子节点的值

但请参见上文,了解更具弹性的方法。使用应用模板可以更轻松地编写更改和可维护性代码。

您写道:

基本上我考虑了每个循环

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

<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>
如果焦点已经在段落上,可以使用select=text选择所有文本子项,但不能更深,或者select=。选择当前节点,同时获取子节点的值


但请参见上文,了解更具弹性的方法。使用应用模板可以更容易地为更改和可维护性编写代码。

不完全是这样,节点将选择所有子节点,而不考虑其类型,并且。将选择当前节点。根据关注点的不同,这两个问题都可能包含原始问题中的内容?在for each中,从上下文来看,我假设没有提供类似于示例的内容。事实上,这个问题的回答令OP满意。令OP满意是件好事,但你的陈述事实上是错误的。两个表达式都不会返回标记。他们也不会只选择文本。哦,天哪,我不知道我想到了什么。当然,这完全是胡说八道,我把它的副本和价值搞混了,即使在那时我也错了。显然,我没有与XSLT进行定期交互的时间太长了。。。。显然,我既不能否决我自己的答案,也不能删除它,因为现在它被接受了。不完全正确,节点将选择所有子节点,而不考虑类型和。将选择当前节点。根据关注点的不同,这两个问题都可能包含原始问题中的内容?在for each中,从上下文来看,我假设没有提供类似于示例的内容。事实上,这个问题的回答令OP满意。令OP满意是件好事,但你的陈述事实上是错误的。两个表达式都不会返回标记。他们也不会只选择文本。哦,天哪,我不知道我想到了什么。当然,这完全是胡说八道,我把它的副本和价值搞混了,即使在那时我也错了。显然,我没有与XSLT进行定期交互的时间太长了。。。。显然,我既不能否决我自己的答案,也不能删除它,因为现在它被接受了。Hm,文本建议非常令人惊讶,因为它只返回文本子元素,而不返回元素子元素的文本。考虑到这个用例,我不会把它放在您的主要示例中。@user52889,是的,我应该更详细地描述它。Hm,文本建议非常令人惊讶,因为它只返回文本子元素,而不返回元素子元素的文本。考虑到这个用例,我不会把它放在您的主要示例中。@user52889,是的,我应该更详细地描述它。更新。
<xsl:value-of select="slide/paragraph" />