Xslt XSL:跟踪切换的元素

Xslt XSL:跟踪切换的元素,xslt,Xslt,以下字符串使用切换在源XML中进行编码,我希望将其更改为包含格式信息的节点。(这是对WordprocessingML的XLIFF。) 文本、粗体文本、粗体和斜体文本、粗体文本、纯文本 源XML: <text> Text <format id="1" type="bold" /> bold text, <format id="2" type="italics" /> bold and italics text, <endformat id="2"

以下字符串使用切换在源XML中进行编码,我希望将其更改为包含格式信息的节点。(这是对WordprocessingML的XLIFF。)

文本、粗体文本、粗体和斜体文本、粗体文本、纯文本

源XML:

<text>
Text  
<format id="1" type="bold" />
bold text,  
<format id="2" type="italics" /> 
bold and italics text,
<endformat id="2" />
bold text,
<endformat id="1" />
plain text.
</text>

正文
黑体字,
粗体和斜体文本,
黑体字,
纯文本。
我需要:

<run>
   <format></format>
   <text>Text, </text>
</run>
<run>
   <format><b/></format>
   <text>bold text, </run>
</run>
<run>
   <format><b/><i/></format>
   <text>bold and italics text, </run>
</run>
<run>
   <format><b/></format>
   <text>bold text, </run>
</run>
<run>
   <format></format>
   <text>plain text.</run>
</run>

文本,
黑体字,
粗体和斜体文本,
黑体字,
纯文本。
如果我使用的是过程语言,我会保留一个运行记录,记录哪些格式化是活动的,并相应地写出
元素


但是如何在XSL中实现呢?

因为
text
的子节点是交替的text(),然后是
format
,具有对称的
endformat
text()
,处理两个开始节点和两个结束节点,并通过每次前两个节点和跟踪两个节点来缩短列表。但是我不清楚你的文件的语法,所以这可能是不可能的