在XSLT中测试文本节点
我有以下混合内容元素:在XSLT中测试文本节点,xslt,xpath,xslt-2.0,Xslt,Xpath,Xslt 2.0,我有以下混合内容元素: <firstElement type="random">text1<secondElement>random_value</secondElement>text2</firstElement> 如何编写只选择的文本节点的测试 我尝试了text(),但它只适用于上下文节点的子文本节点,而且self::text()似乎不是一个合适的Xpath。我还尝试使用XSLT2.0的实例对xs:string进行测试,但也没有成功 如何编写
<firstElement type="random">text1<secondElement>random_value</secondElement>text2</firstElement>
如何编写只选择
的文本节点的测试
我尝试了text()
,但它只适用于上下文节点的子文本节点,而且self::text()
似乎不是一个合适的Xpath。我还尝试使用XSLT2.0的
实例对xs:string
进行测试,但也没有成功
如何编写只选择文本节点的测试
你的问题真的很难理解:
首先,测试不选择任何内容—我想您的意思是希望测试只通过文本节点
接下来,当您这样做时:
<xsl:for-each select="child::*">
同样有效——并且具有向后兼容XSLT1.0的优势
如何编写只选择文本节点的测试
你的问题真的很难理解:
首先,测试不选择任何内容—我想您的意思是希望测试只通过文本节点
接下来,当您这样做时:
<xsl:for-each select="child::*">
同样有效——并且具有向后兼容XSLT 1.0的优势。也许您理解我的问题的困难来自于错误的设计选择。我希望对文本节点和
firstElement
中的其他节点执行不同的转换,并且仅在该特定元素中执行。为此,我编写了两个不同的模板:一个用于作为firstElement子元素的文本节点,另一个用于firstElement的其他元素子元素。但为了清晰起见,我认为最好是在一个模板中同时进行两个转换。这就是为什么我想使用一个for-each循环和嵌套的if条件。谢谢,我使用了。text()的实例,它工作正常。你能再帮我一点吗?我不完全理解这里每个
循环的行为。当我选择元素节点时,例如使用if
语句,使用apply templates
仅复制元素的文本内容。我需要指定apply templates select=“”
,以便应用匹配的模板。为什么?在xsl:for each
中使用apply-templates-select=“.”“
没有什么意义。如果要将模板应用于所选节点,则直接应用它,使用apply templates
而不是xsl:for each
。在任何情况下,apply templates
的默认选择都是上下文节点的子节点。可能您理解我的问题的困难来自错误的设计选择。我希望对文本节点和firstElement
中的其他节点执行不同的转换,并且仅在该特定元素中执行。为此,我编写了两个不同的模板:一个用于作为firstElement子元素的文本节点,另一个用于firstElement的其他元素子元素。但为了清晰起见,我认为最好是在一个模板中同时进行两个转换。这就是为什么我想使用一个for-each循环和嵌套的if条件。谢谢,我使用了。text()的实例,它工作正常。你能再帮我一点吗?我不完全理解这里每个
循环的行为。当我选择元素节点时,例如使用if
语句,使用apply templates
仅复制元素的文本内容。我需要指定apply templates select=“”
,以便应用匹配的模板。为什么?在xsl:for each
中使用apply-templates-select=“.”“
没有什么意义。如果要将模板应用于所选节点,则直接应用它,使用apply templates
而不是xsl:for each
。在任何情况下,apply templates
的默认选择都是上下文节点的子节点。
<xsl:template match="firstElement">
<output>
<!-- select all child nodes -->
<xsl:for-each select="node()">
<!-- pass only text nodes -->
<xsl:if test=". instance of text()">
<xsl:copy/>
</xsl:if>
</xsl:for-each>
</output>
</xsl:template>
<output>text1text2</output>
<xsl:template match="firstElement">
<output>
<xsl:copy-of select="text()"/>
</output>
</xsl:template>
<xsl:if test="self::text()">