Excel 到 XML 命名空间前缀自定义

Posted

技术标签:

【中文标题】Excel 到 XML 命名空间前缀自定义【英文标题】:Excel to XML Namespace Prefix Customization 【发布时间】:2016-07-19 16:18:40 【问题描述】:

我正在使用 Excel 2013 通过 XML 映射将数据从电子表格转换为 XML 格式。转换效果很好,但 Excel 将输出文件中的所有 XML 命名空间前缀默认为“ns1”,如下面的代码所示。

XML 到 Excel 转换

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns1:CarrierInterface xmlns:ns1="http:/exampleurl.com/">
    <ns1:Sender>sender</ns1:Sender>
    <ns1:Receiver>receiver</ns1:Receiver>
    <ns1:RecordCount>1</ns1:RecordCount>
    <ns1:SequenceID>143</ns1:SequenceID>
    <ns1:Device>
        <ns1:ID>123456789</ns1:ID>
        <ns1:Make>make</ns1:Make>
        <ns1:Model>model</ns1:Model>
        <ns1:ModelYear>2017</ns1:ModelYear>
        <ns1:DeviceWiFiType>True</ns1:DeviceWiFiType>
        <ns1:PairingState>Initial</ns1:PairingState>
    </ns1:Device>
</ns1:CarrierInterface>

期望的输出

<?xml version="1.0" encoding="UTF-8"?> 
    <carrierInterface:CarrierInterface     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:carrierInterface="http:/exampleurl.com/" xsi:schemaLocation="http:/exampleurl.com/"> 
    <carrierInterface:Sender>sender</carrierInterface:Sender> 
    <carrierInterface:Receiver>receiver</carrierInterface:Receiver> 
    <carrierInterface:RecordCount>1</carrierInterface:RecordCount> 
    <carrierInterface:SequenceID>143</carrierInterface:SequenceID> 
    <carrierInterface:Device> 
       <carrierInterface:ID>123456789</carrierInterface:ICCID> 
       <carrierInterface:Make>make</carrierInterface:Make>  
       <carrierInterface:Model>model</carrierInterface:Model> 
       <carrierInterface:ModelYear>2017</carrierInterface:ModelYear> 
       <carrierInterface:DeviceWiFiType>True</carrierInterface:DeviceWiFiType> 
       <carrierInterface:PairingState>Initial</carrierInterface:PairingState> 
    </carrierInterface:Device> 
</carrierInterface:CarrierInterface> 

是否有人知道无需编写宏即可自定义这些命名空间前缀的简单方法?另外,有谁知道为什么 Excel 会删除为 CarrierInterface 的命名空间定义给出的 URL,如下行所示?

期望的输出

<carrierInterface:CarrierInterface     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:carrierInterface="http:/exampleurl.com/" xsi:schemaLocation="http:/exampleurl.com/">

实际输出

<ns1:CarrierInterface xmlns:ns1="http:/exampleurl.com/">

【问题讨论】:

【参考方案1】:

命名空间前缀名称本身无关紧要;只有通过绑定到命名空间值,它们才能获得意义。

没有符合标准的 XML 处理器关心正在使用的特定命名空间前缀,您也不应该关心它——重要的是命名空间值。

【讨论】:

@user2988717:我接受你为“生活在现实世界中”而道歉,但这个答案适用于这个现实世界。如果您对其他世界有疑问,请发布一个适当的问题,而不是隐藏在一个表达不佳的查询中隐藏在无礼评论中的弱挖掘。谢谢。

以上是关于Excel 到 XML 命名空间前缀自定义的主要内容,如果未能解决你的问题,请参考以下文章

XML 序列化和命名空间前缀

使用命名空间和前缀的 JAXB 解组

带有命名空间和前缀的 Json 到 XML

XMPP:Ejabberd 未将具有命名空间前缀的自定义 IQ 转发给用户

对象到 xml 并在不同的字段中添加不同的前缀和命名空间

如何在没有 xmlns="..." 的情况下使用 XML 命名空间前缀? (。网)