python - 转换自定义 XML 类语法的最佳方式

标签 python xml parsing tags

使用 Python。

所以基本上我有一个类似 XML 的标记语法,但标记没有属性。所以<a>但不是 <a value='t'> .他们定期关闭 </a> .

这是我的问题。我有一些看起来像这样的东西:

<al>
1. test
2. test2
 test with new line
3.  test3
<al>
    1. test 4
    <al>
        2. test 5
        3. test 6
        4. test 7
    </al>
</al>
4. test 8
</al>

我想把它变成:

<al>
<li>test</li>
<li> test2</li>
<li> test with new line</li>
<li>  test3
<al>
    <li> test 4 </li>
    <al>
        <li> test 5</li>
        <li> test 6</li>
        <li> test 7</li>
    </al>
    </li>
</al>
</li>
<li> test 8</li>
</al>

我并不是真的在寻找一个完整的解决方案,而是在寻找正确的方向。我只是想知道这里的人将如何解决这个问题。仅正则表达式?为无属性标记语法编写完整的自定义解析器?破坏现有的 XML 解析器?等

提前致谢

最佳答案

我建议从以下开始:

from xml.dom.minidom import parse, parseString

xml = parse(...)
l = xml.getElementsByTagName('al')

然后遍历l中的所有元素,检查它们的文本子节点(以及递归的 <al> 节点)。

您可以立即在 Python 控制台中开始使用它。

删除文本节点很容易,然后使用 chunk.split('\n') 拆分文本 block 并添加 <li>根据需要返回节点。

修改所有<al>后您可以调用 xml.toxml() 的节点将生成的 xml 作为文本获取。

请注意,您从中获得的元素对象链接回原始 xml文档对象,所以不要删除 xml过程中的对象。

我个人认为这种方式比使用多行正则表达式进行处理更直接、更易于调试。

关于python - 转换自定义 XML 类语法的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711424/

相关文章:

python - 无法运行包含两个函数的 Python 脚本

python - LXML:删除 x

Java - 将 JSON 字符串数组解析为字符串数组

java - 带日期的 ParseException?

python - Python 中的拆分和移动 RGB channel

python - 在 python 中转义 MySQL 的引号

java - 如何使用现有 XML DOC 的属性创建新的 XML DOC?

c - 如何从 XML 文件中读取多个值并将它们与一个值进行有效比较的示例

c# - C#解析某个字符串

python - 类型错误 : str object is not an iterator