捕获XML文件中一个索引位置的字符串并移动到另一个索引位置 [英] capture string in one indexed position and move to another indexed position in xml file

查看:22
本文介绍了捕获XML文件中一个索引位置的字符串并移动到另一个索引位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Python初学者,希望将现有的XML文件转换为LaTeX文档。XML包含许多脚注,这些脚注有时是分开的-因为它们不适合原始文档(一本旧书)中的一页,并且XML文件的创建者希望布局尽可能接近原始文档。在拆分的脚注之间有普通文本以及其他脚注. 下面的代码应该清楚地说明脚注之间的关系:


> normal text <note place="foot" n="(a)" xml:id="seg2pn_8_1"
> next="#seg2pn_8_2">aaa aaa aaa</note> normal text <note place="foot"
> n="(b)">footnote text</note>. normal text. <note place="foot" n="(a)"
> xml:id="seg2pn_8_2" prev="#seg2pn_8_1">bbb bbb bbb</note>


所需输出为:

normal text footnote{aaa aaa aaa bbb bbb bbb} normal text footnote{footnote text}. normal text.

所有内容都可以位于备注的两个部分之间:普通文本、其他备注等。 使用regex的lookback、lookhead和pythons zip方法,我可以打印所需的结果:但我无法进行实际替换并将结果写入第二个文件:

#!/usr/bin/env python3
import re
import sys
inFile = sys.argv[1]

with open(inFile,'r') as f:
   fin = f.read()

   strings_first = (re.findall('(?<=seg2pn_d{1}_2">).*?(?=</note>)', fin, flags=re.DOTALL)) 
   strings_second = (re.findall('(?<=seg2pn_d{1}_1">).*?(?=</note>)', fin, flags=re.DOTALL))

   for t, y in zip(strings_first, strings_second):
     print(t + y)  

xslt

如果您对推荐答案解决方案感兴趣,它非常简单。只需使用添加的规则执行身份转换:

<xsl:template match="note[@place='foot'][@next]">
  <xsl:copy>
    <xsl:value-of select="."/>
    <xsl:value-of select="id(substring(@next, 2))"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="note[@place='foot'][@prev]"/>

这将脚注清理分离到单独的处理阶段,这始终是保持此类应用程序逻辑简单的好主意。

我假设脚注永远不会分成两个以上的部分。

这篇关于捕获XML文件中一个索引位置的字符串并移动到另一个索引位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆