capture string in one indexed position and move to another indexed position in xml file(捕获XML文件中一个索引位置的字符串并移动到另一个索引位置)
本文介绍了捕获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文件中一个索引位置的字符串并移动到另一个索引位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:捕获XML文件中一个索引位置的字符串并移动到另一个索引位置
基础教程推荐
猜你喜欢
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
