Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Xml 用XSLT将连字符括在它自己的元素中_Xml_Xslt_Tei - Fatal编程技术网

Xml 用XSLT将连字符括在它自己的元素中

Xml 用XSLT将连字符括在它自己的元素中,xml,xslt,tei,Xml,Xslt,Tei,给定以下XML: <p> <lb/>Aber, Schertz bey Seite geſetzet; wer mir und ſo viel ehrlichen <lb/>Bieder-Maͤnnern nicht glauben will, der probire es bey den haͤuffigen Kirchen- <lb/>Sachen, die ein Sangloser Organiſt etwa geſchmade

给定以下XML:

<p>
  <lb/>Aber, Schertz bey Seite geſetzet; wer mir und ſo viel ehrlichen
  <lb/>Bieder-Maͤnnern nicht glauben will, der probire es bey den haͤuffigen Kirchen-
  <lb/>Sachen, die ein Sangloser Organiſt etwa geſchmadert hat, (denn es gibt frucht-
  <lb/>bare Naͤchte bey dieſen Leuten,  [...]
</p>

Aber,Schertz bey Seite geſetzet;你是埃利钦吗
在基尔钦的问题上,比埃纳·尼赫特·格劳本·威尔是一位杰出的作家-
Sachen,他戴着一顶帽子(denn es gibt frucht)-
赤裸裸的Naͤchte bey dieſen Leuten,[…]

有没有一种纯粹的XSLT方法可以将其转换成这样

<p>
  <lb/>Aber, Schertz bey Seite geſetzet; wer mir und ſo viel ehrlichen
  <lb/>Bieder-Maͤnnern nicht glauben will, der probire es bey den haͤuffigen Kirchen<pc force="strong">-</pc>
  <lb/>Sachen, die ein Sangloser Organiſt etwa geſchmadert hat, (denn es gibt frucht<pc force="weak">-</pc>
  <lb/>bare Naͤchte bey dieſen Leuten,  [...]
</p>

阿伯,谢尔茨·贝伊·塞特·盖特泽特,你是米尔·维耶尔·埃利钦吗
在基尔钦的问题上,比埃纳·尼赫特·格劳本·威尔是一位杰出的作家-
Sachen,他戴着一顶帽子(denn es gibt frucht)-
赤裸裸的Naͤchte bey dieſen Leuten,[…]

如果
元素后面的第一个字母是大写字母,则
force
属性应为
,否则为

目前,我完全被困在如何使用XSLT 3选择一个以某个字母(
-
)结尾的文本节点上,该节点后面有一个
-兄弟节点,该兄弟节点本身后跟大写字母…

(但仅用于使用
xsl:mode
声明身份转换,并使用
|
,而不是
concat()
分析字符串
,可替换为
xsl:analyze string


-
{$sep}

应该这样做。如果文本后面可以跟
,则匹配文本节点的模式可能需要更具体,例如
lb
不一定跟在文本节点后面,就像在您的示例中一样。

文本节点似乎不是以
-
结尾,而是以
-
后跟空格(如换行符和空格)结尾不过,假设XSLT2或更高版本,您应该能够使用
匹配(,'-\s*$)
进行测试。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all"
  expand-text="yes">
  
  <xsl:param name="sep" as="xs:string">-</xsl:param>
  
  <xsl:param name="pattern" as="xs:string" select="'(' || $sep || ')' || '(\s*)$'"/>

  <xsl:mode on-no-match="shallow-copy"/>
  
  <xsl:template match="p/text()[matches(., $pattern)][following-sibling::node()[1][self::lb]]">
    <xsl:value-of select="replace(., $pattern, '')"/>
    <pc force="{if (following-sibling::node()[2][self::text()[matches(., '^\p{Lu}')]]) then 'strong' else 'weak'}">{$sep}</pc>
    <xsl:value-of select="analyze-string(., $pattern)//*:group[@nr = 2]"/>
  </xsl:template>

</xsl:stylesheet>