使用 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/