如何计算XML文件中标签的书签?

2024-04-25 21:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

为了计算XML标记的起始和结束书签,我遇到了一个问题:

源代码:

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
   <food>
      <name>Belgian Waffles</name>
      <price>$5.95</price>
      <description>
       Two of our famous Belgian Waffles with plenty of real maple syrup
      </description>
     <calories>650</calories>
  </food>
</breakfast_menu>

输出:

Tag_name  |  Bookmark(Row number : Column no in file)

Breakfast      Starting ->2:1 | Ending : 11:1
Food           Starting ->3:4 | Ending : 10:4         

注意:这里在输出前应计算标记空格。

Python中是否有任何固定的算法或现有的库来计算书签?你知道吗


Tags: ofname标记foodendingdescriptionxmlprice
1条回答
网友
1楼 · 发布于 2024-04-25 21:31:37

您可以使用The ElementTree XML API并编写另一个解析器:

import xml.etree.ElementTree as ET

class LineNumberingParser(ET.XMLParser):
    def _start_list(self, *args, **kwargs):
        element = super(self.__class__, self)._start_list(*args, **kwargs)
        element.start_ln = self.parser.CurrentLineNumber
        element.start_cn = self.parser.CurrentColumnNumber+1
        return element

    def _end(self, *args, **kwargs):
        element = super(self.__class__, self)._end(*args, **kwargs)
        element.end_ln = self.parser.CurrentLineNumber
        element.end_cn = self.parser.CurrentColumnNumber+1
        return element

tree = ET.parse('1.xml', parser=LineNumberingParser())

root = tree.getroot()

def process_node(root):
    print "{:<20} Starting -> {:>2}:{:<10} Ending -> {:>2}:{:<10}".format(root.tag,root.start_ln,root.start_cn,root.end_ln,root.end_cn)
    for child in root:
        process_node(child)

print "{:<20} {:<20} {:<20}".format("tag","start","end")
process_node(root)

输出:

tag                  start                end                 
breakfast_menu       Starting ->  2:1          Ending -> 11:1         
food                 Starting ->  3:4          Ending -> 10:3         
name                 Starting ->  4:7          Ending ->  4:28        
price                Starting ->  5:7          Ending ->  5:19        
description          Starting ->  6:7          Ending ->  8:7         
calories             Starting ->  9:6          Ending ->  9:19  

顺便说一下,您忘了在xml的末尾加一个斜杠。你知道吗

相关问题 更多 >