【问题标题】:Alternative for namespaces in xmlxml 中命名空间的替代方案
【发布时间】:2012-09-09 22:57:51
【问题描述】:

我有一个网络服务,它为我们的许多客户提供 xml 提要,我们的客户在不同类型的设备中使用 xml。在我们的 XML 中,我们也有一些命名空间。但是我们的一个客户由于末端的一些限制而无法检测到命名空间。但我也无法为他提供新的 xml。 请给我一些建议,这样我就可以在不使用命名空间的情况下满足命名空间的需求,这样我就可以将我的 xml 更改为可供所有人使用。

提前致谢。

【问题讨论】:

  • 类似于 C 程序员如何模拟具有函数名称前缀的名称空间,如 http_get()http_post() 与 C++ 方式的名称空间如 http::get()http::post(),你可以输出你的 XML像<ns_elem> 这样的元素而不是<ns:elem>
  • 谢谢@benhoyt。我只是应用了一个字符串替换机制来用_ 替换所有: 符号,我现在可以在客户端解析它了。

标签: xml xml-parsing xml-serialization xsd


【解决方案1】:

我只是应用了一个字符串替换机制来用_ 替换所有: 符号,现在我可以在客户端解析它了。

【讨论】:

  • 有趣——您是否在整个 XML 文档中将 : 的字符串替换为 _?当然,这是非常危险的,因为属性和文本内容中很可能包含冒号。也许有一些方法可以只替换标签名称。
  • 如果您可以完全控制源 XML 输出,那么简单的字符串替换可能适合您的情况。也就是说,这种简单化的方法最终可能会被证明是脆弱的。
【解决方案2】:
But one of our clients can't detect namespaces because of some limitation at their end. 

在努力解决它之前,需要更多地了解限制是什么。由于命名空间感知 XML 解析器非常普遍,它们工作的环境一定很奇怪,也许处理命名空间的能力不是它的唯一限制?

【讨论】:

    【解决方案3】:

    一种可能性是使用样式表 (XSLT / xsltproc) 自动将包含命名空间的 xml 格式转换为另一种格式,剥离命名空间。在这种情况下,样式表将非常简单(只有几行)并且易于维护。生成的文档只是没有命名空间的旧文档的副本,因此它基本上保持不变。

    【讨论】:

    • 只是想指出可能存在多个命名空间。
    • 我认为他正在寻找一种确定性的破解方法,而不是一个永久的解决方案,但你是绝对正确的。命名空间是 XML 的核心,它使其他标记成为可能,这也意味着它们可以并行使用。
    猜你喜欢
    • 2017-08-06
    • 2013-03-28
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多