当XSD包含其他导入的XSD时,引用导入的XSD的XML条目不包括名称空间前缀。
这是具有多个导入的xsd的开始:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:inv="http://www.aade.gr/myDATA/invoice/v1.0"
xmlns:icls="https://www.aade.gr/myDATA/incomeClassificaton/v1.0"
xmlns:ecls="https://www.aade.gr/myDATA/expensesClassificaton/v1.0"
targetNamespace="http://www.aade.gr/myDATA/invoice/v1.0"
elementFormDefault="qualified"
version="1.0.3">
<xs:import namespace="https://www.aade.gr/myDATA/incomeClassificaton/v1.0"
schemaLocation="incomeClassification-v1.0.3.xsd"/>
<xs:import namespace="https://www.aade.gr/myDATA/expensesClassificaton/v1.0"
schemaLocation="expensesClassification-v1.0.3.xsd"/>
生成的示例XML如下所示:
<?xml version="1.0"?>
<!--XML document created with Delphi XE2 by Three Plus Ltd-->
<InvoicesDoc xmlns="http://www.aade.gr/myDATA/invoice/v1.0"
xmlns:icls="https://www.aade.gr/myDATA/incomeClassificaton/v1.0"
xmlns:ecls="https://www.aade.gr/myDATA/expensesClassificaton/v1.0">
<invoice>
<uid>1</uid>
<mark>240254</mark>
<issuer>
<vatNumber>084110672</vatNumber>
<country>GR</country>
<branch>0</branch>
</issuer>
<counterpart>
<vatNumber>052354924</vatNumber>
<country>GR</country>
<branch>0</branch>
<address>
<postalCode></postalCode>
<city>ΑΓΙΑ ΒΑΡΒΑΡΑ</city>
</address>
</counterpart>
<invoiceHeader>
<series>Β</series>
<aa>59</aa>
<issueDate>2021-01-07</issueDate>
<invoiceType>1.1</invoiceType>
<currency>EUR</currency>
</invoiceHeader>
<paymentMethods>
<paymentMethodDetails>
<type>3</type>
<amount>254.68</amount>
</paymentMethodDetails>
</paymentMethods>
<invoiceDetails>
<lineNumber>1</lineNumber>
<netValue>205.39</netValue>
<vatCategory>1</vatCategory>
<vatAmount>49.29</vatAmount>
<incomeClassification>
<classificationType>E3_561_001</classificationType>
<classificationCategory>category1_1</classificationCategory>
<amount>205.39</amount>
</incomeClassification>
</invoiceDetails>
<invoiceSummary>
<totalNetValue>205.39</totalNetValue>
<totalVatAmount>49.29</totalVatAmount>
<totalWithheldAmount>0.00</totalWithheldAmount>
<totalFeesAmount>0.00</totalFeesAmount>
<totalStampDutyAmount>0.00</totalStampDutyAmount>
<totalOtherTaxesAmount>0.00</totalOtherTaxesAmount>
<totalDeductionsAmount>0.00</totalDeductionsAmount>
<totalGrossValue>254.68</totalGrossValue>
<incomeClassification>
<classificationType>E3_561_001</classificationType>
<classificationCategory>category1_1</classificationCategory>
<amount>205.39</amount>
</incomeClassification>
</invoiceSummary>
</invoice>
</InvoicesDoc>
这个XML不能通过验证,因为IncomeClassification条目应该包括前缀"icls“,如下所示:
<?xml version="1.0"?>
<!--XML document created with Delphi XE2 by Three Plus Ltd-->
<InvoicesDoc xmlns="http://www.aade.gr/myDATA/invoice/v1.0"
xmlns:icls="https://www.aade.gr/myDATA/incomeClassificaton/v1.0"
xmlns:ecls="https://www.aade.gr/myDATA/expensesClassificaton/v1.0">
<invoice>
<uid>1</uid>
<mark>241108</mark>
<issuer>
<vatNumber>084110672</vatNumber>
<country>GR</country>
<branch>0</branch>
</issuer>
<counterpart>
<vatNumber>130197574</vatNumber>
<country>GR</country>
<branch>0</branch>
<address>
<postalCode>12135</postalCode>
<city>ΠΕΡΙΣΤΕΡΙ</city>
</address>
</counterpart>
<invoiceHeader>
<series>Β</series>
<aa>274</aa>
<issueDate>2021-01-16</issueDate>
<invoiceType>1.1</invoiceType>
<currency>EUR</currency>
</invoiceHeader>
<paymentMethods>
<paymentMethodDetails>
<type>5</type>
<amount>45.50</amount>
</paymentMethodDetails>
</paymentMethods>
<invoiceDetails>
<lineNumber>1</lineNumber>
<netValue>36.70</netValue>
<vatCategory>1</vatCategory>
<vatAmount>8.80</vatAmount>
<incomeClassification>
<icls:classificationType>E3_561_001</icls:classificationType>
<icls:classificationCategory>category1_1</icls:classificationCategory>
<icls:amount>36.70</icls:amount>
</incomeClassification>
</invoiceDetails>
<invoiceSummary>
<totalNetValue>36.70</totalNetValue>
<totalVatAmount>8.80</totalVatAmount>
<totalWithheldAmount>0.00</totalWithheldAmount>
<totalFeesAmount>0.00</totalFeesAmount>
<totalStampDutyAmount>0.00</totalStampDutyAmount>
<totalOtherTaxesAmount>0.00</totalOtherTaxesAmount>
<totalDeductionsAmount>0.00</totalDeductionsAmount>
<totalGrossValue>45.50</totalGrossValue>
<incomeClassification>
<icls:classificationType>E3_561_001</icls:classificationType>
<icls:classificationCategory>category1_1</icls:classificationCategory>
<icls:amount>36.70</icls:amount>
</incomeClassification>
</invoiceSummary>
</invoice>
</InvoicesDoc>
有没有一种方法可以更改向导创建的单元,以生成带前缀的正确XML?
发布于 2021-11-12 05:16:04
我终于找到了一个办法来手动添加前缀:
首先为所有三个条目声明变量(这里只显示第一个):
nodeClassificationType:IXMLNode;
然后替换代码:
IncomeClassificationType.ClassificationType:='xxxxxx'
通过以下方式:
nodeClassificationType:=
IncomeClassificationType.AddChild('icls:classificationType');
nodeClassificationType.Text:='xxxxx'
它完美地工作了!!
https://stackoverflow.com/questions/69916785
复制