gpt4 book ai didi

xml - 如何消除重复的 XML 命名空间定义?

转载 作者:行者123 更新时间:2023-12-04 16:57:42 25 4
gpt4 key购买 nike

我经常遇到在 XML 中多次定义相同命名空间的情况,而不是仅在需要它的元素的父元素中定义。

是否有一种简单的方法/工具可以提取 XML 中的所有命名空间定义并将这些定义中的每一个重新定位到一个节点,以便每个命名空间只定义一次?最好还有一个选项,让所有节点都以其命名空间为前缀(而不是使用来自某个父节点的默认命名空间)。我发现这会产生更多人类可读的 XML。

例如,如何自动翻译这个

<m:Albums xmlns:m="http://www.example.com/music">
<m:Album xmlns:m="http://www.example.com/music">
<m:Artist xmlns:m="http://www.example.com/music">
<c:Name xmlns:c="http://www.example.com/common">
Sting
</c:Name>
</m:Artist>
<m:Title>
Mercury Falling
</m:Title>
</m:Album>
<Album xmlns="http://www.example.com/music">
<Artist>
<c:Name xmlns:c="http://www.example.com/common">
Maria Mena
</c:Name>
</Artist>
<Title xmlns="http://www.example.com/music">
Weapon in Mind
</Title>
</Album>
</m:Albums>

成这个?
<m:Albums xmlns:m="http://www.example.com/music" xmlns:c="http://www.example.com/common">
<m:Album>
<m:Artist>
<c:Name>
Sting
</c:Name>
</m:Artist>
<m:Title>
Mercury Falling
</m:Title>
</m:Album>
<m:Album>
<m:Artist>
<c:Name>
Maria Mena
</c:Name>
</m:Artist>
<m:Title>
Weapon in Mind
</m:Title>
</m:Album>
</m:Albums>

最佳答案

作为对我自己问题的部分回答,我发现 unix 命令

xmllint --nsclean

部分解决了问题,但并没有消除所有重复的命名空间。当从问题应用于我的示例 XML 时,它会产生以下结果。
<m:Albums xmlns:m="http://www.example.com/music">
<m:Album>
<m:Artist>
<c:Name xmlns:c="http://www.example.com/common">
Sting
</c:Name>
</m:Artist>
<m:Title>
Mercury Falling
</m:Title>
</m:Album>
<Album xmlns="http://www.example.com/music">
<Artist>
<c:Name xmlns:c="http://www.example.com/common">
Maria Mena
</c:Name>
</Artist>
<Title>
Weapon in Mind
</Title>
</Album>
</m:Albums>

这消除了已经在父节点中声明的命名空间。但是,它不会将重复的命名空间声明拉到公共(public)父节点(例如 c:Name 节点),也不会通过将受影响的节点转换为使用等效的非默认命名空间(例如 Album 节点)来删除重复的默认命名空间。默认命名空间中的节点及其子节点)。

仍然希望有一个解决方案可以在 xmllint 的情况下删除重复的命名空间失败。

关于xml - 如何消除重复的 XML 命名空间定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com