Xml XSLT中的卷曲引号实现

Xml XSLT中的卷曲引号实现,xml,xslt,Xml,Xslt,我试图在XSLT中实现卷曲引号。但是,它在某些边缘情况下失败。 考虑以下输入: <p>"This is a "sample quote text" that needs to be checked"</p> “这是一个需要检查的“示例报价文本” 现在,我想将直接引号转换为卷曲引号。我在网上看到的所有实现都将直接引号替换为交替的开头和结尾卷曲引号。然而,在这样的特殊情况下,这会失败,其中需要的输出是: <p>“This is a “sample quote

我试图在XSLT中实现卷曲引号。但是,它在某些边缘情况下失败。 考虑以下输入:

<p>"This is a "sample quote text" that needs to be checked"</p>
“这是一个需要检查的“示例报价文本”

现在,我想将直接引号转换为卷曲引号。我在网上看到的所有实现都将直接引号替换为交替的开头和结尾卷曲引号。然而,在这样的特殊情况下,这会失败,其中需要的输出是:

<p>“This is a “sample quote text” that needs to be checked”</p>
“这是一个需要检查的“示例报价文本”

我想做的是检查报价前是否有空格。如果有空格,则开始报价,否则结束报价。例外情况是行首和行尾的引号。我不确定在遇到引号时如何检查前一个字符,以及如何同时处理起始引号和结束引号


任何帮助都将不胜感激。谢谢。

我曾经遇到过类似的问题,直到我意识到我正在使用XSLT来呈现HTML。由于我可以使用CSS,我终于想出了下面的解决方案(来源:)

首先,我定义CSS规则:

q {
  quotes: "“" "”" "“" "”";
}
q:before {
    content: open-quote;
}
q:after {
    content: close-quote;
}
如您所见,应用于
q
元素的CSS规则中的
quotes
属性告诉您,已经引用的文本中的内部引号也使用相同的符号

其次,我使用了
而不是“(我不知道在你的情况下这是否容易做到;我的是)

最后,下面的段落按预期呈现。同样,我假设您呈现的是HTML:

<p><q>This is a <q>sample quote text</q> that needs to be checked</q></p>
这是需要检查的报价文本示例


您使用的是XSLT 1.0还是2.0?--还要注意,被引用的短语可能并不总是被空格(或仅空格)包围——例如:谁说了“某个引号”?我使用的是XSLT 2.0。对于您共享的示例,不也适用相同的规则吗?例如,谁说了“某个引号”?会变成谁说了“某个引号”?因为我在最初的帖子中提到,行的开头和结尾的引号分别是开始引号和结束引号。只是不确定如何实现。那么,您可以使用replace()了函数将空格+引号替换为空格+开头,将引号+空格替换为结尾-虽然我怀疑使用正则表达式可以找到更智能的解决方案。--不,相同的规则不适用于我的示例,因为第二个引号后面没有空格,而且它不是字符串的最后一个字符。哦,很抱歉,我错过了这一点就像在考虑基于“空间”的标记化一样,如果文本包含引号。但你的解决方案似乎更简单。执行速度更快?这样一个简单的解决方案,我真是想入非非:非常感谢。我将实现它并返回:)输入和输出文件都是XML格式的。我认为CSS在这方面没有帮助。是否有一个完全用XSLT的解决方案?