首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在XSLT处理指令之间抓取文本

在XSLT处理指令之间抓取文本
EN

Stack Overflow用户
提问于 2020-03-25 02:09:54
回答 1查看 79关注 0票数 0

我尝试在下面的XML上运行XSLT,以便用新元素包装某些PI之间的文本:

输入XML:

代码语言:javascript
运行
复制
<doc>
   <p>
      <?addition?>hello<?addition?> text1
   </p>
   <p>text2</p>
   <p>
      <?addition?>bye<?addition?> text2
   </p>
</doc>

我尝试将addition-startaddition-end之间的文本包装在一个<u>元素中,如下所示。

所需输出:

代码语言:javascript
运行
复制
<doc>
   <p>
      <u>hello</u> text1
   </p>
   <p>text2</p>
   <p>
      <u>bye</u> text2
   </p>
</doc>

我当前的XSLT错误地获取了不在PI的当前样式表之间的文本节点:

代码语言:javascript
运行
复制
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="#all"
    version="2.0">
    <xsl:template
        match="@* | node()">
        <xsl:copy
            copy-namespaces="no"
            exclude-result-prefixes="#all"
            inherit-namespaces="no">
            <xsl:apply-templates
                select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//p/text()[preceding::processing-instruction('addition')]
                                   [following::processing-instruction('addition')]">
        <u><xsl:value-of select="." /></u>
    </xsl:template>
</xsl:stylesheet>

有没有办法调整我的XSLT来实现这一点,并且只用<u>包装由PI包围的文本

EN

Stack Overflow用户

回答已采纳

发布于 2020-03-25 02:49:10

我觉得你想

代码语言:javascript
运行
复制
<xsl:template match="p/text()[preceding-sibling::node()[1][self::processing-instruction('addition')]]
                             [following-sibling::node()[1][self::processing-instruction('addition')]]">
    <u><xsl:value-of select="." /></u>
</xsl:template>

https://xsltfiddle.liberty-development.net/ehVZvvF

而且,正如Daniel Haley在他的评论中指出的那样,您还可以添加一个空的模板<xsl:template match="processing-instruction('addition')"/>来删除处理指令。

https://xsltfiddle.liberty-development.net/ehVZvvF/1

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60836885

复制
相关文章

相似问题

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