我已经达到了我对XSLT知识的极限,但存在以下问题。
我有一个看起来像这样的XML文件,简化:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>
<w>This</w>
<w>is</w>
<w>a</w>
<w>sentence</w>
<w>with</w>
<w>a</w>
<entity type="name">Name</entity>
<w>and</w>
<w>a</w>
<entity type="place">Place</entity>
<w>etc</w>. <w>This</w>
<w>is</w>
<w>another</w>
<w>sentence</w>
<w>with</w>
<w>an</w>
<w>abbrev</w>. <w>before</w>
<w>its</w>
<w>end</w>. <w>Is</w>
<w>this</w>
<w>a</w>
<w>question</w>? <w>Sure</w>
<w>it</w>
<w>is</w>! </p>
</root>
文字已经被单词标记。我需要自动标记句子。为此,我有一个变量,其中包含结束句子的可能字符:
<xsl:variable name="SEnd">.!?</xsl:variable>
所以,我需要一个XSLT 2.0样式表,它将:
<w>
)组合在一起,从段落中的第一个<w>
开始,以<w>
元素结尾,其直接兄弟text()
节点以其中一个成员开头变量集&#34; SEnd&#34;,但是当且仅当following-sibling::w
以大写字母开头时(这必须是REGEX \p{Lu}
而不仅仅是[A-Z]
,因为我有多个脚本; <s></s>
。这种方式<w>abbrev</w>.
不会被识别为句子的最后一个单词,因为它后跟一个小写单词。
结果应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>
<s><w>This</w>
<w>is</w>
<w>a</w>
<w>sentence</w>
<w>with</w>
<w>a</w>
<entity type="name">Name</entity>
<w>and</w>
<w>a</w>
<entity type="place">Place</entity>
<w>etc</w>.</s>
<s><w>This</w>
<w>is</w>
<w>another</w>
<w>sentence</w>
<w>with</w>
<w>an</w>
<w>abbrev</w>. <w>before</w>
<w>its</w>
<w>end</w>.</s>
<s><w>Is</w>
<w>this</w>
<w>a</w>
<w>question</w>?</s>
<s><w>Sure</w>,
<w>it</w>
<w>is</w>!</s>
</p>
</root>
我知道这不是防弹的,并且会有例外情况,但这对于这项特殊任务并不重要。我从概念上理解这个问题,我认为应该使用<xsl:for-each-group>
,但我不知道如何将它们全部放在一起。
我非常感谢你的帮助。
一切顺利, 丁鲷
答案 0 :(得分:1)
怎么样:
nullglob