如何将具有固定值的重复文本模式转换为XML或新的文本模式(同样具有固定值)

时间:2019-05-09 15:37:32

标签: python xml parsing text xml-parsing

我正在将交换机配置从一个供应商转换为另一个供应商,并且某些值(配置属性)希望转换为新值(再次为固定值)。 基本上将预定义的字符串列表与相应的字符串交换。

我有一些使用XSLT将XML转换为XML的经验,但是不幸的是,输入文件是文本,我不知道实现这一目标的最佳方法是什么。

我应该集中精力使用XSLT还是应该尝试使用python进行解析?

文本文件中的每个选项卡均以特定的字符串(界面)开头,以特定的字符串(出口)结尾。 在两者之间有一定数量的字符串值,我可以定义可用于转换的1to1字符串转换。

以下是输入文本文件的示例:

interface A1<br>
   speed-duplex auto-10-100<br>
   no power-over-ethernet<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 10<br>
   untagged vlan 1<br>
   exit<br>
interface A2<br>
   speed-duplex auto-10-100<br>
   no power-over-ethernet<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 10<br>
   untagged vlan 1<br>
   exit<br>
interface A3<br>
   name "AP1"<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 5<br>
   untagged vlan 1<br>
   exit<br>

*<br>
*<br>
*<br>
interface A24<br>
   speed-duplex auto-10-100<br>
   no power-over-ethernet<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 10<br>
   untagged vlan 1<br>
   exit <br>
 interface B1<br>
   speed-duplex auto-10-100<br>
   no power-over-ethernet<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 10<br>
   untagged vlan 1<br>
   exit<br>

*<br>
*<br>
*  <br>
interface B24<br>
   speed-duplex auto-10-100<br>
   no power-over-ethernet<br>
   ipv6 access-group "AG_IN" in<br>
   service-policy "SP_IN" in<br>
   tagged vlan 10<br>
   untagged vlan 1<br>
   exit<br>

输出应如下所示:

interface GigabitEthernet1/0/1<br>
  speed auto 100 10<br>
  no poe enable<br>
  port hybrid vlan 10 tagged<br>
  port hybrid vlan 1 untagged<br>
  quit<br>
interface GigabitEthernet1/0/2<br>
  speed auto 100 10<br>
  no poe enable<br>
  port hybrid vlan 10 tagged<br>
  port hybrid vlan 1 untagged  <br>
  quit<br>
interface GigabitEthernet1/0/3<br>
  description AP1<br>
  port hybrid vlan 10 tagged<br>
  port hybrid vlan 1 untagged<br>
  quit<br>
  interface GigabitEthernet1/0/25<br>
  speed auto 100 10<br>
  no poe enable<br>
  port hybrid vlan 10 tagged<br>
  port hybrid vlan 1 untagged<br>
  quit<br>
  interface GigabitEthernet1/0/26<br>
  speed auto 100 10<br>
  no poe enable<br>
  port hybrid vlan 10 tagged<br>
  port hybrid vlan 1 untagged<br>
  quit<br>

所以替换:

 "interface A1" with  "interface GigabitEthernet1/0/1"
 "no power-over-ethernet" with "no poe enable"
 "tagged vlan 10" with "port hybrid vlan 10 tagged"

唯一的可变字符串是名称“ AP1”之后的字符串,必须将其翻译成描述AP1。

0 个答案:

没有答案