xsd 相关问题

XSD通常是指以W3C XML Schema格式编写的文档,其中包含特定类型的XML文档的描述。

使用 C# 从 xml 内部元素获取特定值

我有一个 XML 文件,其数据如下: 我有一个 XML 文件,其数据如下: <Invoice xmlns='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2' xmlns:cac='urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2' xmlns:cbc='urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2' xmlns:ext='urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2'><ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionURI>urn:oasis:names:specification:ubl:dsig:enveloped:xades</ext:ExtensionURI> <ext:ExtensionContent> <sig:UBLDocumentSignatures xmlns:sig='urn:oasis:names:specification:ubl:schema:xsd:CommonSignatureComponents-2' xmlns:sac='urn:oasis:names:specification:ubl:schema:xsd:SignatureAggregateComponents-2' xmlns:sbc='urn:oasis:names:specification:ubl:schema:xsd:SignatureBasicComponents-2'> <sac:SignatureInformation> <cbc:ID>urn:oasis:names:specification:ubl:signature:1</cbc:ID> <sbc:ReferencedSignatureID>urn:oasis:names:specification:ubl:signature:Invoice</sbc:ReferencedSignatureID> <ds:Signature xmlns:ds='http://www.w3.org/2000/09/xmldsig#' Id='signature'> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm='http://www.w3.org/2006/12/xml-c14n11'/> <ds:SignatureMethod Algorithm='http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256'/> <ds:Reference Id='invoiceSignedData' URI=''> <ds:Transforms> <ds:Transform Algorithm='http://www.w3.org/TR/1999/REC-xpath-19991116'> <ds:XPath>not(//ancestor-or-self::ext:UBLExtensions)</ds:XPath> </ds:Transform> <ds:Transform Algorithm='http://www.w3.org/TR/1999/REC-xpath-19991116'> <ds:XPath>not(//ancestor-or-self::cac:Signature)</ds:XPath> </ds:Transform> <ds:Transform Algorithm='http://www.w3.org/TR/1999/REC-xpath-19991116'> <ds:XPath>not(//ancestor-or-self::cac:AdditionalDocumentReference[cbc:ID='QR'])</ds:XPath> </ds:Transform> <ds:Transform Algorithm='http://www.w3.org/2006/12/xml-c14n11'/> </ds:Transforms> <ds:DigestMethod Algorithm='http://www.w3.org/2001/04/xmlenc#sha256'/> <ds:DigestValue>CAgICAgICAgPC9jYWM6SW52b2ljZUxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JbnZvaWNlPg==</ds:DigestValue> </ds:Reference> <ds:Reference Type='http://www.w3.org/2000/09/xmldsig#SignatureProperties' URI='#xadesSignedProperties'> <ds:DigestMethod Algorithm='http://www.w3.org/2001/04/xmlenc#sha256'/> <ds:DigestValue>NjY5ZWIzMjg5ZjhlZWY3NjUyNTdkNzFmYmIzMWMwMmQ4OGVkMDgzZWIzMWQwMmYxNGQ4OTMxNDYyMDVlMDkzNA==</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue>MEYCIQCPhRxAvaN69JA9Ng+twhxmpSZ3aQMkOR0p1LKZGZfwtQIhAO6yPeKAGn9slyDkhkJVOt7HEG2jObxsSiGCUGQ0Mb1l</ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>yNhycQ3bNlLFdOPlqYT6RVQTWgnK1Gh0NHdcSY4PfC0CIQCSAthXvv7tetUL69Wjp8BxnLLMwerxZhBnewo/gF3EJA==</ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> <ds:Object> <xades:QualifyingProperties xmlns:xades='http://uri.etsi.org/01903/v1.3.2#' Target='signature'> <xades:SignedProperties Id='xadesSignedProperties'> <xades:SignedSignatureProperties> <xades:SigningTime>2023-12-26T19:49:21Z</xades:SigningTime> <xades:SigningCertificate> <xades:Cert> <xades:CertDigest> <ds:DigestMethod Algorithm='http://www.w3.org/2001/04/xmlenc#sha256'/> <ds:DigestValue>YjcyNzI4NWZiN2FlNzI1NTQxOGIzZGY1ZWY4MDc2N2JkMDIyMDM5ZDU5YjJmNWRkOTQ5YTZkMDU2YjEzYzJkZA==</ds:DigestValue> </xades:CertDigest> <xades:IssuerSerial> <ds:X509IssuerName>CN=TSZEINVOICE-SubCA-1, DC=extgazt, DC=gov, DC=local</ds:X509IssuerName> <ds:X509SerialNumber>2475382886904809774818644480820936050208702411</ds:X509SerialNumber> </xades:IssuerSerial> </xades:Cert> </xades:SigningCertificate> </xades:SignedSignatureProperties> </xades:SignedProperties> </xades:QualifyingProperties> </ds:Object> </ds:Signature> </sac:SignatureInformation> </sig:UBLDocumentSignatures> </ext:ExtensionContent> </ext:UBLExtension> </ext:UBLExtensions> <cbc:ProfileID>reporting:1.0</cbc:ProfileID> <cbc:ID>3333</cbc:ID> <cbc:UUID>feab5f74-ca2d-4047-b421-15907e1ec212</cbc:UUID> <cbc:IssueDate>2023-07-06</cbc:IssueDate> <cbc:IssueTime>07:17:26</cbc:IssueTime> <cbc:InvoiceTypeCode name='0100000'>388</cbc:InvoiceTypeCode> <cbc:DocumentCurrencyCode>SAR</cbc:DocumentCurrencyCode> <cbc:TaxCurrencyCode>SAR</cbc:TaxCurrencyCode> <cac:AdditionalDocumentReference> <cbc:ID>ICV</cbc:ID> <cbc:UUID>23</cbc:UUID> </cac:AdditionalDocumentReference> <cac:AdditionalDocumentReference> <cbc:ID>PIH</cbc:ID> <cac:Attachment> <cbc:EmbeddedDocumentBinaryObject mimeCode='text/plain'>NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==</cbc:EmbeddedDocumentBinaryObject> </cac:Attachment> </cac:AdditionalDocumentReference> <cac:AdditionalDocumentReference> <cbc:ID>QR</cbc:ID> <cac:Attachment> <cbc:EmbeddedDocumentBinaryObject mimeCode="text/plain">SDFWEsdf234SDFWER</cbc:EmbeddedDocumentBinaryObject> </cac:Attachment> </cac:AdditionalDocumentReference> <cac:Signature> <cbc:ID>urn:oasis:names:specification:ubl:signature:Invoice</cbc:ID> <cbc:SignatureMethod>urn:oasis:names:specification:ubl:dsig:enveloped:xades</cbc:SignatureMethod> </cac:Signature> <cac:AccountingSupplierParty> <cac:Party> <cac:PartyIdentification> <cbc:ID schemeID='CRN'></cbc:ID> </cac:PartyIdentification> <cac:PostalAddress> <cbc:StreetName>dsf</cbc:StreetName> <cbc:BuildingNumber>3453</cbc:BuildingNumber> <cbc:CitySubdivisionName>xcvcx</cbc:CitySubdivisionName> <cbc:CityName>xcvxc</cbc:CityName> <cbc:PostalZone>45354</cbc:PostalZone> <cac:Country> <cbc:IdentificationCode>SA</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyTaxScheme> <cbc:CompanyID>311380797100003</cbc:CompanyID> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:PartyTaxScheme> <cac:PartyLegalEntity> <cbc:RegistrationName>LAMARA SUPERMARKET</cbc:RegistrationName> </cac:PartyLegalEntity> </cac:Party> </cac:AccountingSupplierParty> <cac:AccountingCustomerParty> <cac:Party> <cac:PartyIdentification> <cbc:ID schemeID='NAT'></cbc:ID> </cac:PartyIdentification> <cac:PostalAddress> <cbc:StreetName>ddd</cbc:StreetName> <cbc:BuildingNumber></cbc:BuildingNumber> <cbc:CitySubdivisionName>sss</cbc:CitySubdivisionName> <cbc:CityName>vvv</cbc:CityName> <cbc:PostalZone>55443</cbc:PostalZone> <cac:Country> <cbc:IdentificationCode>SA</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyTaxScheme> <cbc:CompanyID>311380797200003</cbc:CompanyID> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:PartyTaxScheme> <cac:PartyLegalEntity> <cbc:RegistrationName>MESS EXPENSE</cbc:RegistrationName> </cac:PartyLegalEntity> </cac:Party> </cac:AccountingCustomerParty> <cac:Delivery> <cbc:ActualDeliveryDate>2023-07-06</cbc:ActualDeliveryDate> </cac:Delivery> <cac:PaymentMeans> <cbc:PaymentMeansCode>30</cbc:PaymentMeansCode> </cac:PaymentMeans> <cac:AllowanceCharge> <cbc:ChargeIndicator>false</cbc:ChargeIndicator> <cbc:AllowanceChargeReason>discount</cbc:AllowanceChargeReason> <cbc:Amount currencyID='SAR'>0.00</cbc:Amount> <cac:TaxCategory> <cbc:ID schemeID='UN/ECE 5305' schemeAgencyID='6'>S</cbc:ID> <cbc:Percent>15</cbc:Percent> <cac:TaxScheme> <cbc:ID schemeID='UN/ECE 5153' schemeAgencyID='6'>VAT</cbc:ID> </cac:TaxScheme> </cac:TaxCategory> </cac:AllowanceCharge> <cac:TaxTotal> <cbc:TaxAmount currencyID='SAR'>17.71</cbc:TaxAmount> </cac:TaxTotal> <cac:TaxTotal> <cbc:TaxAmount currencyID='SAR'>17.71</cbc:TaxAmount> <cac:TaxSubtotal> <cbc:TaxableAmount currencyID='SAR'>118.04</cbc:TaxableAmount> <cbc:TaxAmount currencyID='SAR'>17.71</cbc:TaxAmount> <cac:TaxCategory> <cbc:ID schemeID='UN/ECE 5305' schemeAgencyID='6'>S</cbc:ID> <cbc:Percent>15.00</cbc:Percent> <cac:TaxScheme> <cbc:ID schemeID='UN/ECE 5153' schemeAgencyID='6'>VAT</cbc:ID> </cac:TaxScheme> </cac:TaxCategory> </cac:TaxSubtotal> </cac:TaxTotal> <cac:LegalMonetaryTotal> <cbc:LineExtensionAmount currencyID='SAR'>118.04</cbc:LineExtensionAmount> <cbc:TaxExclusiveAmount currencyID='SAR'>118.04</cbc:TaxExclusiveAmount> <cbc:TaxInclusiveAmount currencyID='SAR'>135.75</cbc:TaxInclusiveAmount> <cbc:AllowanceTotalAmount currencyID='SAR'>0.00</cbc:AllowanceTotalAmount> <cbc:PrepaidAmount currencyID='SAR'>0.00</cbc:PrepaidAmount> <cbc:PayableAmount currencyID='SAR'>135.75</cbc:PayableAmount> </cac:LegalMonetaryTotal> <cac:InvoiceLine> <cbc:ID>1</cbc:ID> <cbc:InvoicedQuantity unitCode='PCE'>1.00</cbc:InvoicedQuantity> <cbc:LineExtensionAmount currencyID='SAR'>5.00</cbc:LineExtensionAmount> <cac:TaxTotal> <cbc:TaxAmount currencyID='SAR'>0.75</cbc:TaxAmount> <cbc:RoundingAmount currencyID='SAR'>5.75</cbc:RoundingAmount> </cac:TaxTotal> <cac:Item> <cbc:Name>sdfds</cbc:Name> <cac:ClassifiedTaxCategory> <cbc:ID>S</cbc:ID> <cbc:Percent>15</cbc:Percent> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:ClassifiedTaxCategory> </cac:Item> <cac:Price> <cbc:PriceAmount currencyID='SAR'>5.00</cbc:PriceAmount> <cac:AllowanceCharge> <cbc:ChargeIndicator>false</cbc:ChargeIndicator> <cbc:AllowanceChargeReason>discount</cbc:AllowanceChargeReason> <cbc:Amount currencyID='SAR'>0.00</cbc:Amount> </cac:AllowanceCharge> </cac:Price> </cac:InvoiceLine><cac:InvoiceLine> <cbc:ID>2</cbc:ID> <cbc:InvoicedQuantity unitCode='PCE'>1.00</cbc:InvoicedQuantity> <cbc:LineExtensionAmount currencyID='SAR'>113.04</cbc:LineExtensionAmount> <cac:TaxTotal> <cbc:TaxAmount currencyID='SAR'>16.96</cbc:TaxAmount> <cbc:RoundingAmount currencyID='SAR'>130.00</cbc:RoundingAmount> </cac:TaxTotal> <cac:Item> <cbc:Name>eeee</cbc:Name> <cac:ClassifiedTaxCategory> <cbc:ID>S</cbc:ID> <cbc:Percent>15</cbc:Percent> <cac:TaxScheme> <cbc:ID>VAT</cbc:ID> </cac:TaxScheme> </cac:ClassifiedTaxCategory> </cac:Item> <cac:Price> <cbc:PriceAmount currencyID='SAR'>113.04</cbc:PriceAmount> <cac:AllowanceCharge> <cbc:ChargeIndicator>false</cbc:ChargeIndicator> <cbc:AllowanceChargeReason>discount</cbc:AllowanceChargeReason> <cbc:Amount currencyID='SAR'>0.00</cbc:Amount> </cac:AllowanceCharge> </cac:Price> </cac:InvoiceLine> </Invoice> 从这个 XML 我想更新 XML 元素的值: <cac:AdditionalDocumentReference> <cbc:ID>QR</cbc:ID> <cac:Attachment> <cbc:EmbeddedDocumentBinaryObject mimeCode="text/plain">SDFWEsdf234SDFWER</cbc:EmbeddedDocumentBinaryObject> </cac:Attachment> </cac:AdditionalDocumentReference> 我想用 C# 更改 EmbeddedDocumentBinaryObject 的值。 我尝试过的: XDocument xdoc = XDocument.Load(Server.MapPath("~/XML/EInvoice.xml")); XNamespace ns = "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"; xdoc.Descendants(ns + "ProfileID").FirstOrDefault()?.SetValue("sdfwer"); 通过上面的代码,我可以更新 ProfileID 元素的值。有什么办法可以用这个方法来达到我上面的要求。我尝试了之前的不同问题,但无法获得确切的选项。我是处理 XML 的初学者。 请尝试以下解决方案。 c# void Main() { const string FILENAME = @"e:\Temp\CodinozTechnologies.xml"; const string NEWFILENAME = @"e:\Temp\CodinozTechnologies_New.xml"; const string FINDVALUE = "QR"; const string NEWVALUE = "++NewValue++"; XDocument xdoc = XDocument.Load(FILENAME); XNamespace ns = xdoc.Root.GetNamespaceOfPrefix("cbc"); xdoc.Descendants(ns + "EmbeddedDocumentBinaryObject") .Where(x => x.Ancestors().Elements(ns + "ID").FirstOrDefault()?.Value == FINDVALUE) .FirstOrDefault()? .SetValue(NEWVALUE); xdoc.Save(NEWFILENAME); }

回答 1 投票 0

如何使用emacs nxml模式使用xsd模式验证某些xml文件?

我已经安装了GNU emacs 23.2.1和nxml-mode-20041004。 我想使用 xsd 文件验证 xml 文件,但 emacs 抱怨 没有可用于文件扩展名“xsd”的模式加载器 我怎么可以

回答 2 投票 0

根据 XML 架构 (XSD) 验证 JSON

是否可以在 Java 中使用 XSD 验证 JSON?我有一个接收 JSON 响应的应用程序,我想根据现有的 XSD 对其进行验证。我的应用程序的另一部分使用 X...

回答 3 投票 0

在 wpf 应用程序运行时从 xsd 生成 c# 文件

我不确定这是否可行,甚至不是一个好的方法,但我有一个 WPF 应用程序,它使用从 xsd 文件生成的 C# 类。该类是通过在术语中使用 xsd.exe 手动生成的...

回答 1 投票 0

限制在任何年份的特定日期

我正在创建一个架构,需要一个与季度结束相对应的日期(因此 YYYY-03-31、YYYY-06-30、YYYY-09-30 和 YYYY-12-31)。 我正在创建一个架构,需要一个与季度结束相对应的日期(因此 YYYY-03-31、YYYY-06-30、YYYY-09-30 和 YYYY-12-31)。 <xs:element type="xs:date" name="FilingPeriod"/> 是否有一种明智的方法来接受 date 格式的这些值并将它们限制为这些特定但可能无限的值(即永远是任何一年)?我想我可以对 string 字段施加一些限制并以这种方式进行验证,但这似乎是使用正确的 date 格式的黑客行为。 XSD 1.1 带有简单类型断言: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="dates"> <xs:complexType> <xs:sequence> <xs:element name="date" type="end-of-quarter-date" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:simpleType name="end-of-quarter-date"> <xs:restriction base="xs:date"> <xs:assertion test="(day-from-date($value) = 31 and month-from-date($value) = (3, 12)) or (day-from-date($value) = 30 and month-from-date($value) = (6, 9))"/> </xs:restriction> </xs:simpleType> </xs:schema> XML 工作台中的在线 XSD 小提琴。

回答 1 投票 0

Eclipse RCP 中的 JDK 17 accessExternalSchema 问题

在 Eclipse RCP 中,我有一个具有 jar 依赖项的插件。 在此 jar 中,名为“xsd”的包内有一些 .xsd 文件。 (https://i.stack.imgur.com/Npv0u.png) 在同一个罐子里...

回答 1 投票 0

将 xsd 枚举转换为 C#

我有一个 xsd 文件,我从中生成一个 C# 类。为了提供更轻松的维护,我想仅在 xsd 文件中定义一个枚举,以便当我必须更改枚举时,我

回答 4 投票 0

Xerces v2.12.0 XML 架构 1.1 验证

Xerces 2.12.0 声称支持 XSD 1.1 (https://xerces.apache.org/xerces2-j/faq-xs.html),但我无法通过 SchemaFactory.newInstance 调用。 更多背景: 此行失败: 导入 javax.xml。

回答 2 投票 0

JAXB 和 xjc 的问题:构建项目时使用 minExclusive 约束解析 xs:decimal

我在从包含带有 minExclusive 约束的 xs:decimal 元素的 XML 模式 (XSD) 生成 Java 代码时遇到了 JAXB 和 xjc 的问题。尽管将类型指定为 xs:deci...

回答 1 投票 0

带有枚举的 Xsd - 输入枚举类型时出现错误

我正在尝试添加枚举类型,如下所示。它添加了字符串类型,但当 jaxb 将 xsd 转换为 java 类时我需要枚举值。我使用 simpletype 将其转换为字符串但不...

回答 2 投票 0

XML 模式 Beispiel aus Buch“Einstieg in XML”funktioniert nicht

在一个 C# 程序中,包含了 bestellbeleg1.xml 和 XmlReader。 Das zugehörige XSD-Schema (bestellbeleg1.xsd) wird über schema.SourceUri = args[1] angegeben。贝姆拉德...

回答 1 投票 0

XML XSD:从导入的 XSD 扩展复杂类型

我想扩展在导入的 XSD 中定义的复杂类型。我设置了以下示例: 基础.xsd: 我想扩展在导入的 XSD 中定义的复杂类型。我设置了以下示例: Base.xsd: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/base"> <xs:complexType name="BaseType"> <xs:sequence> <xs:element name="baseElement" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> 扩展.xsd: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:base="http://www.example.com/base" xmlns="http://www.example.com/extended" targetNamespace="http://www.example.com/extended"> <xs:import namespace="http://www.example.com/base" schemaLocation="Base.xsd" /> <xs:complexType name="ExtendedType"> <xs:complexContent> <xs:extension base="base:BaseType"> <xs:sequence> <xs:element name="extendedElement" type="xs:int" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="ExtendedElement" type="ExtendedType" /> </xs:schema> 示例.xml <?xml version="1.0" encoding="UTF-8"?> <extended:ExtendedElement xmlns:extended="http://www.example.com/extended" xmlns="http://www.example.com/base" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/extended extended.xsd http://www.example.com/base base.xsd"> <baseElement>someString</baseElement> <extendedElement>3</extendedElement> </extended:ExtendedElement> 现在这个 XML 的问题是:我收到一个验证错误,其中一个元素“baseElement”是预期的(即使错误正好显示在这个元素上)。 XSD 定义有问题吗? 验证错误表明它不需要 XML 中的命名空间限定元素: 发现以元素 '{"http://www.example.com/base":baseElement}' 开头的无效内容。预计会出现 '{baseElement}' 之一。 由于您定义了非限定名称空间 xmlns="http://www.example.com/base" 来指向 http://www.example.com/base,因此每个非限定 XML 标签都将绑定到此。 通过将其更改为 xmlns:base="http://www.example.com/base" 命名空间,它应该可以工作

回答 1 投票 0

是否可以使用 JAXB 从模式映射到 java.util.Map?

我有一个现有的 XML 模式,其中包含我想使用 JAXB 映射到某种 Java 映射的类型。我的构建过程采用架构并创建 bean。我想定制...

回答 3 投票 0

演示 JAXB 解组不会加载 XSD 模式

与此问题相关,给出以下名为 customer.xsd 的架构: 与这个问题相关,给出以下名为customer.xsd的模式: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="stringMaxSize5"> <xs:restriction base="xs:string"> <xs:maxLength value="5"/> </xs:restriction> </xs:simpleType> <xs:element name="customer"> <xs:complexType> <xs:sequence> <xs:element name="name" type="stringMaxSize5"/> <xs:element ref="phone-number" maxOccurs="2"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="phone-number"> <xs:complexType> <xs:sequence/> </xs:complexType> </xs:element> </xs:schema> 以下 XML 文档称为 input.xml: <customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./customer.xsd"> <name>Jane Doe</name> <phone-number/> <phone-number/> <phone-number/> </customer> 以及以下解组代码: import java.io.File; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlRootElement; public class Unmarshal { @XmlRootElement(name = "customer") public static class Customer { public String name; @XmlElement(name="phone-number") public List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(); } public static class PhoneNumber {} public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Customer.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); unmarshaller.setSchema(null); Customer customer = (Customer) unmarshaller.unmarshal(new File("input.xml")); System.out.println(customer.name); } } Java 代码能够将 XML 输入文档反序列化为 Customer 的实例,即使此 XML 文档产生 2 个验证错误(由外部编辑器指示): cvc-maxLength-valid: Value 'Jane Doe' with length = '8' is not facet-valid with respect to maxLength '5' for type 'stringMaxSize5'.xml(cvc-maxLength-valid) cvc-type.3.1.3: The value 'Jane Doe' of element 'name' is not valid.xml(cvc-type.3.1.3) 和 cvc-complex-type.2.4.f: 'phone-number' can occur a maximum of '2' times in the current sequence. This limit was exceeded. No child element is expected at this point.xml(cvc-complex-type.2.4.f) 这意味着 JAXB 在解组期间没有验证给定的 XML 输入,但是: 鉴于 unmarshaller.setSchema(null); 设置为 DISABLE 模式验证,有没有办法证明在解组时 JVM 未访问 customer.xsd 文件的内容? 换句话说,有没有办法不盲目相信 JVM 不会加载 XSD 引用,即使模式验证显式设置为 null? 更新1: 目的是找出 XML 文档内的 XSD 架构引用有多大可能成为安全攻击媒介,如下所述: https://owasp.org/www-community/vulnerability/XML_External_Entity_(XXE)_Processing https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html 谢谢。 我并不真正理解检查这一点的必要性,但这里有一个简单的用例,应该证明在解组 XML 时 XSD 文件不会被 JVM 加载: 通过任何您想要的插件从 XSD 创建 Java 类,或者像这里一样,手动创建它。将其打包在 jar 文件中,其中不含 XSD(仅限 Java 类) 在另一个 Java 程序中从 XML 编写解组代码,该代码依赖于第一个 JAR,并在类路径中没有任何 XSD 的情况下运行它 ==> 即使不知道 XSD 架构,您的代码仍然可以工作 您还可以查看 Java 代码本身: 实现 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl 接口的 Unmarshaller 的默认 schema 属性为 null(因此将其设置为 null 在上面的代码中是无操作的) 您的代码不引用您创建 Java XML-annotated-POJO 的 XSD 本身:JVM 无法猜测您是根据外部模式编写的代码。 您还可以在调试模式下运行程序,并看到 XSD 不会被加载(同样,您的 Java 代码中没有引用:您甚至可以删除它,这不会产生任何影响)。 不过,我希望我已经回答了你的问题。

回答 1 投票 0

不同命名空间中的golang常用结构体

我有 160 多个 .xsd 模式,对于每个文件,我使用 xsdgen 生成 xsd.go 文件,但每个文档都有 CommonType 的公共标头。 命名空间 some_document 类型文档结构{ 标头常见...

回答 1 投票 0

jaxb2 从主 xsd 生成的类和通用 xsd 具有不同的命名空间

我有 2 个 xsd 模式,我使用 maven-jaxb2-plugin 从中生成一个类消息。主要的 xsd 是 message.xsd,它导入 common.xsd,其中包含一些常见类型。然而两者都有不同...

回答 1 投票 0

为 xml 模式中的简单类型生成正确的对象

我有 camt.026 ISO 消息的 ISO 20022 标准 .xsd 文件,以及它可以根据复杂类型 InvestigationStatus5Choice 上的 conf 元素使用的可能外部代码。 camt.026 xsd:...

回答 1 投票 0

使用 OpenXML 时按正确的顺序插入子元素

我正在使用 DocumentFormat.OpenXml 库修改 .docx 文档。我知道元素排序很重要,否则文档将无法通过模式验证,并且可能会导致文档无法...

回答 2 投票 0

XML:属性还是子项? [重复]哈利·波特

在 XSD、SOAP 和其他 XML 约定中,您经常会看到类似以下内容: 哈利·波特 J.K.罗琳 现在我想知道...

回答 2 投票 0

如何在Python中从xsd创建xml作为实例

我有xsd文件,我的任务是基于我尝试使用外部的xsd创建一个空的xml 我在 github 上找到的包是链接 https://github.com/fortesp/xsd2xml 这就是我的

回答 1 投票 0

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