Python 3.x 基于字符python的xml合并行

Python 3.x 基于字符python的xml合并行,python-3.x,xml,elementtree,Python 3.x,Xml,Elementtree,我有多个xml文件,这些是PDF文档的xml版本。首先,我必须合并xml文件,然后读取以连字符结尾的单词。如果一个单词以连字符结尾,则在XML中创建了一个单独的标记(TCL CHAR='-'),我需要识别这些标记,并将前一行的最后一个单词与下一行的第一个单词合并在一个单独的标记中,该标记名为。我有以下合并代码 def run(files): first = None for filename in files: data = ET.parse(filename).getroot()

我有多个xml文件,这些是PDF文档的xml版本。首先,我必须合并xml文件,然后读取以连字符结尾的单词。如果一个单词以连字符结尾,则在XML中创建了一个单独的标记(TCL CHAR='-'),我需要识别这些标记,并将前一行的最后一个单词与下一行的第一个单词合并在一个单独的标记中,该标记名为。我有以下合并代码

def run(files):
first = None
for filename in files:
    data = ET.parse(filename).getroot()
    if first is None:
        first = data
    else:
        first.extend(data)
if first is not None:
    root = ET.tostring(first)
return root
下面是单词合并的代码

beg_line_cont=[]
结束线继续=[]
对于根目录中的块:
对于方框中的段落:
对于第段中的行:
对于行中的单词:
如果word.tag='TC':
line=word.text
如果word.tag=='TCL'和word.attrib['CHAR']==''-':
beg\u行\u cont.追加(行)
如果word.tag='TC':
line=word.text
结束\行\继续追加(行)

合并代码不起作用,我可以在TCL CHAR='-'之前的前一行中找到它,但不能在下一行中找到它。。。有人能帮忙吗

XML文件示例如下:

</PAR>
<LPAR PBDPL="[D]137[L]120" PBCAMGTI="[G]LP6[T]Lead VJ" STRIKE="0"></LPAR>
<PAR PBDPL="[D]3360[P]3m" PBCAMGTI="[G]I2AS[I]0" TAPARADV="[HYP]1" BLMODE="3" STRIKE="0" UNIQID="d180d82ee84ff937">
<LINE>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>Diese Angebotsunterlage (die &#132;</TC>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="BOLD" PNTSZSTR="" FONTNAME="" FACE="B" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>Angebotsunterlage</TC>
<FRMDEF NAME="BOLD" PNTSZSTR="" FONTNAME="" FACE="B" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>&#147;) beschreibt das freiwillige &#246;ffentliche &#220;bernahme</TC>
<TCL CHAR="-" WIDTH="67" CTLCHAR="-" CTLSTR="" TYPE="SYSTEMHYPHEN" VISIBLE="1" USE_SF_LDRVALUES="1"/></LINE>
<LINE>
<TC>angebot in Form eines Tauschangebots (das &#132;</TC>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="BOLD" PNTSZSTR="" FONTNAME="" FACE="B" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>Angebot</TC>
<FRMDEF NAME="BOLD" PNTSZSTR="" FONTNAME="" FACE="B" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>&#147;) der ADO Properties S.A., einer Aktiengesell</TC>
<TCL CHAR="-" WIDTH="67" CTLCHAR="-" CTLSTR="" TYPE="SYSTEMHYPHEN" VISIBLE="1" USE_SF_LDRVALUES="1"/></LINE>
<LINE>
<TC>schaft nach luxemburgischem Recht </TC>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="ITALIC" PNTSZSTR="" FONTNAME="" FACE="I" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC>(soci&#233;t&#233; anonyme)</TC>
<FRMDEF NAME="ITALIC" PNTSZSTR="" FONTNAME="" FACE="I" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="1" SAVFRM="0" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<FRMDEF NAME="ROMAN" PNTSZSTR="" FONTNAME="" FACE="R" SETWIDTHSTR="" SLANTSTR="" BASESTR="" COLORSTR="" SCREENSTR="" SMALLCAPS="2" ALLCAPS="2" KNOCKOUT="2" ENDFRM="0" SAVFRM="1" UNDLEAD1="" UNDLEAD2="" UNDTHICK1="" UNDTHICK2="" UNDCOLOR="" UNDSCREEN="" UNDLKNOCKOUT="1"/>
<TC> mit Sitz in Senningerberg, eingetragen im </TC>
</LINE>
<LINE>

Diese Angebotsunterlage(die„;
安格博森酒店
“;)贝斯克莱特·达斯·弗雷威利格和#246;芬特里切Ü;伯纳姆
形式为eines Tauschangebots的angebot(das和#132;
安格博特
“;)ADO Properties S.A.,einer Aktiengesell
沙夫特·纳赫·卢森伯吉斯切姆酒店
(socié;té;匿名)
麻省理工学院坐落于伊利诺伊州的森宁格伯格

遇到连字符时,您需要:

  • 删除上一行的最后一个单词
  • 开始新的一行
  • 将第一个单词从下一行复制到新行,之前不留空格
  • 其想法是为新行保留一个“前缀”变量。也就是说,如果您有
    blah blahblah
    ,您将看到“blah”,将其设置为下一行的前缀,当看到“blahblah”时,将其连接到“blah”

    text=前缀=“”
    对于根目录中的块:
    对于方框中的段落:
    对于第段中的行:
    对于行中的单词:
    如果word.tag='TC':
    text+=前缀+word.text
    前缀=“”
    如果word.tag=='TCL'和word.attrib['CHAR']==''-':
    #找到最后一个字
    last_space_index=text.rfind(“”)
    前缀=文本[最后的空间索引+1:]
    text=text[:最后的空间索引]
    
    Hi Chayim-感谢您的回复。我试着运行这段代码,但是它没有给出期望的结果,而是将整个内容作为输出。我正在尝试进一步探索您的代码。同时,你对此有什么建议吗?是的,你想要什么?你试过运行你的代码吗???text变量提供了整个内容。我需要这个连字符的单词。在我共享输出的示例中,预期文本变量中有2个单词(Ubernahme angebot和Aktiengesell schaft)。嗨,Chayim-只是想让你知道,我自己已经解决了这个问题。在这种情况下,如果您仍在(或尚未)处理此问题,则可以忽略。如果你已经完成了,请分享你的代码。谢谢你的帮助