如何解决如何为XML生成名称空间前缀?
我正在使用JAXB生成XML文件。 java类是从xsd文件生成的,每个软件包都包含一个package-info文件。生成的package-info文件为:
@javax.xml.bind.annotation.XmlSchema(namespace = "urn:oasis:names:specification:ubl:schema:xsd:somestatus-2",elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package oasis.names.specification.ubl.schema.xsd.somestatus_2;
当我转换为XML时,名称空间前缀生成为ns#(ns0,ns1 ..)而不是ext,cac等。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns5:SomeStatus xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ns5="urn:oasis:names:specification:ubl:schema:xsd:SomeStatus-2" xmlns:ns2="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:ns4="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ns3="http://abc.xyz/2009/02/27/ubl20-abc-extensions">
<ns2:SomeExtensions>
<ns2:SomeExtension>
<ID>ID1</ID>
<ns2:ExtensionAGID>1</ns2:ExtensionAGID>
<ns2:ExtensionAGName>One</ns2:ExtensionAGName>
</ns2:SomeExtension>
</ns2:SomeExtensions>
<UBLVersionID>1</UBLVersionID>
<CustomizationID>oneCustomization</CustomizationID>
<IssueDate>Today</IssueDate>
</ns5:SomeStatus>
但是使用@XmlSchema批注,我可以使用正确的名称空间生成XML。
@javax.xml.bind.annotation.XmlSchema(elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,namespace = "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",xmlns = {
@XmlNs(prefix = "",namespaceURI = "urn:oasis:names:specification:ubl:schema:xsd:somestatus-2"),@XmlNs(prefix = "abc",namespaceURI = "http://abc.xyz/2009/02/27/ubl20-abc-extensions"),@XmlNs(prefix = "ext",namespaceURI = "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"),@XmlNs(prefix = "cbc",namespaceURI = "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"),@XmlNs(prefix = "cac",namespaceURI = "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2") })
package oasis.names.specification.ubl.schema.xsd.commonaggregatecomponents_2;
import javax.xml.bind.annotation.XmlNs;
这样可以正确命名空间
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SomeStatus xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:SomeStatus-2" xmlns:abc="http://abc.xyz/2009/02/27/ubl20-abc-extensions" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<ext:SomeExtensions>
<ext:SomeExtension>
<cbc:ID>ID1</cbc:ID>
<ext:ExtensionAGID>1</ext:ExtensionAGID>
<ext:ExtensionAGName>One</ext:ExtensionAGName>
</ext:SomeExtension>
</ext:SomeExtensions>
<cbc:UBLVersionID>1</cbc:UBLVersionID>
<cbc:CustomizationID>oneCustomization</cbc:CustomizationID>
<cbc:IssueDate>2020-10-27</cbc:IssueDate>
<cbc:IssueTime>09:37:02Z</cbc:IssueTime>
<cac:SomeEvent>
<cac:ReportedPackage>
<cac:SomeHandlingUnit>
<cac:ReceivedHandlingUnitRLine>
<cac:Package>
<cac:PackageStage>
<cbc:ID>23579</cbc:ID>
</cac:PackageStage>
</cac:Package>
</cac:ReceivedHandlingUnitRLine>
</cac:SomeHandlingUnit>
</cac:ReportedPackage>
</cac:SomeEvent>
</SomeStatus>
问题在于package-info是一个生成的文件。这些更改是手动完成的,在重新编译时会丢失。有什么方法可以完整生成这些设置的package-info吗?或通过其他任何方式生成将在打包信息生成后更改其内容的生成过程。
此外,如果生成的名称空间前缀为ns#,那么对于XML解析器来说是否真的是一个问题。我问是因为两种情况下的值/ URL都相同,但是前缀不同?
(Maven用于打包项目)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。