捕获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]"/>
这将脚注清理分离到单独的处理阶段,这始终是保持此类应用程序逻辑简单的好主意。
我假设脚注永远不会分成两个以上的部分。
相关文章