XML 命名空间默认值与命名空间前缀

问题描述 投票:0回答:1

我的同事为有效负载中的每个元素提供了一个命名空间

ns0
以实现最佳实践,但我的解析器停止工作。阅读有关该主题的更多内容,似乎没有必要为每个元素声明名称空间;可以在root下设置吗?

当您在 XML 文档中使用多个命名空间时,您可以定义 将一个命名空间作为默认命名空间,以创建更简洁的外观 文档。默认命名空间在根元素中声明,并且 适用于文档中所有不合格的元素。默认 命名空间仅适用于元素,不适用于属性。

来源:https://learn.microsoft.com/en-us/dotnet/standard/data/xml/managing-namespaces-in-an-xml-document

正确的做法是什么?

<ns0:Root
    xmlns:ns0="urn:asw:erT"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:asw:erT">
    <ns0:Ticket
        xmlns:urn="urn:asw:erT" Code="TEST" Key="1">
        <ns0:client>
            <ns0:CardNumber>12345</ns0:CardNumber>
            <ns0:OpenPointsBalance>14352</ns0:OpenPointsBalance>
            <ns0:PointsEarnedValue>46</ns0:PointsEarnedValue>
            <ns0:PointsClosingBalance>14398</ns0:PointsClosingBalance>
        </ns0:client>
    </ns0:Ticket>
</ns0:Root>
xml xml-parsing xml-namespaces
1个回答
0
投票

正确的做法是什么?

两者都不比另一个更正确。

XML文档1

您发布的 XML 带有用于

"urn:asw:erT"
命名空间的显式命名空间前缀,

<ns0:Root
    xmlns:ns0="urn:asw:erT"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:asw:erT">
  <ns0:Ticket
      xmlns:urn="urn:asw:erT" Code="TEST" Key="1">
    <ns0:client>
      <ns0:CardNumber>12345</ns0:CardNumber>
      <ns0:OpenPointsBalance>14352</ns0:OpenPointsBalance>
      <ns0:PointsEarnedValue>46</ns0:PointsEarnedValue>
      <ns0:PointsClosingBalance>14398</ns0:PointsClosingBalance>
    </ns0:client>
  </ns0:Ticket>
</ns0:Root>

XML文档2

完全等同于以下带有

"urn:asw:erT"
默认命名空间的 XML:

<Root
    xmlns="urn:asw:erT"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:asw:erT">
  <Ticket Code="TEST" Key="1">
    <client>
      <CardNumber>12345</CardNumber>
      <OpenPointsBalance>14352</OpenPointsBalance>
      <PointsEarnedValue>46</PointsEarnedValue>
      <PointsClosingBalance>14398</PointsClosingBalance>
    </client>
  </Ticket>
</Root>

任何符合规范的 XML 处理器或应用程序都不应以与 XML 文档 2 不同的方式对待 XML 文档 1

我的同事为有效负载中的每个元素提供了一个命名空间

ns0
以实现最佳实践

为每个元素使用名称空间前缀很好,但对于这是“最佳实践”并没有达成共识。

...我的解析器停止工作

如果您的解析器对 XML Document 1XML Document 2 之间的差异很敏感,那么您的解析器就会损坏。

© www.soinside.com 2019 - 2024. All rights reserved.