Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt4 转义xslt内的html标记:select的值_Qt4_Xslt - Fatal编程技术网

Qt4 转义xslt内的html标记:select的值

Qt4 转义xslt内的html标记:select的值,qt4,xslt,Qt4,Xslt,我正在转换XML文档元素中的文本,该元素还包含其他文本,而不仅仅是超链接到超链接,使用以下方法: <xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)"> <xsl:matching-substring> <a href="{.}"><xsl:value-of select="." /></a> <

我正在转换XML文档元素中的文本,该元素还包含其他文本,而不仅仅是超链接到超链接,使用以下方法:

<xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)">
    <xsl:matching-substring>
        <a href="{.}"><xsl:value-of select="." /></a>
    </xsl:matching-substring>

    <xsl:non-matching-substring>  
        <xsl:value-of select="." />
    </xsl:non-matching-substring>
</xsl:analyze-string>
<xsl:value-of select="replace(AUTHOR_CONTACT_INFORMATION,
XML来源:

<AUTHOR_CONTACT_INFORMATION>Plugin author can be reached at abc@yahoo.com for his email.</AUTHOR_CONTACT_INFORMATION>
不幸的是,我无法逃脱a href中使用的标记。我的XSLT处理器是Qt4的QXmlQuery类。在上面的表达式中,它似乎不支持“禁用输出逸出”属性,我似乎找不到任何其他方法,而不是手动解析最终输出,并用C++代码替换每个'l& lt'&'gt’。 PS:也无法使“分析字符串”在qt中工作。它只返回空字符串。参考问题3并使用以下内容:

<xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)">
    <xsl:matching-substring>
        <a href="{.}"><xsl:value-of select="." /></a>
    </xsl:matching-substring>

    <xsl:non-matching-substring>  
        <xsl:value-of select="." />
    </xsl:non-matching-substring>
</xsl:analyze-string>
<xsl:value-of select="replace(AUTHOR_CONTACT_INFORMATION,
在“Altova XMLSpy”中,上述操作非常有效,完全符合我的要求。但在Qt4中,输出有空字符串,更准确地说,我的标记之前,这个表达式也神秘地消失在输出中,很奇怪。Qt4文档称其处理器支持“xsl:analyze string”。有人在Qt中有“xsl:analyze string”的工作示例吗

Qt4文档说它的处理器不支持“xsl:character-map”,所以没有意义

如果“xsl:analyze string”不起作用,我就回到了“replace”的起点

-桑耶夫

大家好,我正在转换一个 XML文档元素到超链接 使用以下命令:

<xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)">
    <xsl:matching-substring>
        <a href="{.}"><xsl:value-of select="." /></a>
    </xsl:matching-substring>

    <xsl:non-matching-substring>  
        <xsl:value-of select="." />
    </xsl:non-matching-substring>
</xsl:analyze-string>
<xsl:value-of select="replace(AUTHOR_CONTACT_INFORMATION,
“这里的正则表达式”

不幸的是,我无法逃脱a href中使用的标记

简单的回答是:你甚至不应该尝试这样做

转义标记将其降级为一维文本,并且它将仅在浏览器中显示为文本

正确的方法是将标记生成为一系列文字结果元素:

<xsl:template match="AUTHOR_CONTACT_INFORMATION">
  <a href="{someExpression}"><xsl:value-of select="someExpr2"/></a>
</xsl:template>
更新:OP提供了关于真实问题的更多信息。问题是下面的代码在他的XSLT处理器Qt4上不起作用

<xsl:analyze-string select="AUTHOR_CONTACT_INFORMATION" regex="(abc@yahoo.com)">
    <xsl:matching-substring>
        <a href="{.}">
            <xsl:value-of select="." />
        </a>
    </xsl:matching-substring>
    <xsl:non-matching-substring>
        <xsl:value-of select="." />
    </xsl:non-matching-substring>
</xsl:analyze-string>
我已经验证过,当在Saxon 9.1.05下运行时,这些代码的行为符合预期,并产生预期的结果

这意味着Qt4不是兼容的XSLT2.0处理器

在这里,我可以提供以下替代解决方案,它可以与XSLT 1.0处理器和XSLT 2.0处理器一起使用:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="AUTHOR_CONTACT_INFORMATION">
  <xsl:value-of select=
   "substring-before(., 'abc@yahoo.com')"/>
  <a href="abc@yahoo.com">abc@yahoo.com</a>
  <xsl:value-of select=
   "substring-after(., 'abc@yahoo.com')"/>
 </xsl:template>
</xsl:stylesheet>
在提供的XML文档上应用此转换时:

我手头的所有8种不同XSLT处理器都会产生所需的正确结果:

Plugin author can be reached at <a href="abc@yahoo.com">abc@yahoo.com</a> for his email.

我对2.0不太了解,但可能会有帮助。您无法通过这样生成来创建标记。您需要输出一个实际的标记,即您的输入是什么,您想创建什么输出?如果您的目标是使用正则表达式解析纯文本以在输出中从中构建链接元素,那么xsl:analyze字符串可能会有所帮助。请参阅我的答案以获得解释和正确的方法。@Sanjeev:From:xsl:value指令被计算以构造一个新的文本节点;指令的结果是新构造的文本节点。不能从输出文本节点的指令中输出元素或元素的标记。关于必须使用分析字符串指令,您是对的。我不确定这对Dimitre有什么帮助。我把正则表达式放在哪里?可能是我的问题不太清楚。我已经在我原来的帖子上添加了更多信息。您能重读一遍吗?@Sanjeev:我已经更新了我的答案,并且正在提供一个替代解决方案,该解决方案可能适用于您有问题的XSLT处理器。@Dimitre:显然,'abc@yahoo.com“这不是我唯一想转换成超链接的东西。这只是一个例子。我想要转换为'a href'的内容包括超链接和电子邮件地址,因此解决方案应该能够使用正则表达式来查找并替换为'a href'标记。同样,可能有多个超链接和电子邮件地址。例如:@Sanjeev:那么你需要重新定义你的问题,这次要定义好。显然,Qt4不太走运-顺便说一句,我从来没有听说过这样的XSLT处理器-你确定它是XSLT 2处理器吗?。无论如何,如果您能够很好地定义问题,那么在纯XSLT1.0中就可以实现这一点。多年来,我一直在对文本进行标记化、对齐和拼写检查,所以你的任务听起来并不比这些复杂。@Dimitre:我同意我的问题不应该很复杂,但不知何故,我已经设法陷入这个问题两天了。问题很简单,我想使用正则表达式从XML的文本元素中提取所有电子邮件和超链接,并用HTML“a href”替换它们。您可能没有听说过,因为它是一个C++桌面平台,用于编写桌面应用程序,而只有部分与Web技术相关。