我需要获得这样的文件:
<?xml version="1.0" enCoding="UTF-8"?><p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"> <FatturaElettronicaheader> <DatiTrasmissione> <IDTrasmittente> <IDPaese>IT</IDPaese> <IDCodice>01234567890</IDCodice> </IDTrasmittente> <ProgressivoInvio>00001</ProgressivoInvio> <FormatoTrasmissione>FPA12</FormatoTrasmissione> <CodiceDestinatario>AAAAAA</CodiceDestinatario> </DatiTrasmissione>...
我写了这个程序
procedure Tfattura2_new_form.button1Click(Sender: TObject); Var XML : IXMLdocument; RootNode,CurNode,header[...]: IXMLNODE; begin XML := NewXMLdocument; XML.EnCoding := 'utf-8'; XML.Options := [doNodeautoIndent]; RootNode := XML.AddChild('FatturaElettronica'); RootNode.Attributes['versione']:='FPA12'; RootNode.Declarenamespace('ds','http://www.w3.org/2000/09/xmldsig#'); RootNode.Declarenamespace('p','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2'); RootNode.Declarenamespace('xsi','http://www.w3.org/2001/XMLSchema-instance'); [...] header := RootNode.AddChild('FatturaElettronicaheader'); DatiTrasmissione := header.AddChild('DatiTrasmissione'); IDTrasmittente := DatiTrasmissione.AddChild('IDTrasmittente'); [...] XMl.Savetofile('C:\file.xml');end;
现在问题是我需要在根节点中有前缀p(p:FatturaElettronica ……)
但如果我不知道如何:
如果我订
RootNode := XML.AddChild('p:FatturaElettronica');
在xml文件中,我在每个标签中都有前缀p :.
<?xml version="1.0" enCoding="utf-8"?><p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 http://www.fatturapa.gov.it/export/fatturazione/sdi/fatturapa/v1.2/Schema_del_file_xml_FatturaPA_versione_1.2.xsd"> <p:FatturaElettronicaheader> <p:DatiTrasmissione> <p:IDTrasmittente> <p:IDPaese>IT</p:IDPaese> <p:IDCodice>03444630135</p:IDCodice> </p:IDTrasmittente> <p:ProgressivoInvio>23</p:ProgressivoInvio> <p:FormatoTrasmissione>FPR12</p:FormatoTrasmissione> <p:CodiceDestinatario>0000000</p:CodiceDestinatario> </p:DatiTrasmissione>
我该怎么办呢?
谢谢.
当您使用AddChild()添加新的子元素,并且您没有显式指定命名空间时,新子元素继承其父元素的命名空间,如果父元素具有命名空间前缀,则该前缀也会被继承.这是AddChild()中的硬编码行为,您无法更改它.这就是您在所有子节点上看到p:前缀的原因.
如果使用带有命名空间作为输入的重载AddChild(),则可以省略子元素上的前缀,并且不会继承父节点的前缀.但是,新的子元素将具有自己的xmlns声明,即使命名空间与父命名空间相同:
header := RootNode.AddChild('FatturaElettronicaheader','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');
结果:
<FatturaElettronicaheader xmlns="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2">
您也无法更改此行为.
但是,有一种解决方法 – 单独创建子节点而不包含任何父元素或命名空间,然后将其原样插入父元素中,例如:
//header := RootNode.AddChild('FatturaElettronicaheader');header := XML.CreateElement('FatturaElettronicaheader','');RootNode.ChildNodes.Add(header);
然后,您可以将AddChild()用于后续子元素,并且它们将继承FatturaElettronicaheader元素的不存在的命名空间,例如:
XML := NewXMLdocument;XML.EnCoding := 'utf-8';XML.Options := [doNodeautoIndent];RootNode := XML.AddChild('p:FatturaElettronica','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');RootNode.Attributes['versione']:='FPA12';RootNode.Declarenamespace('ds','http://www.w3.org/2000/09/xmldsig#');RootNode.Declarenamespace('p','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');RootNode.Declarenamespace('xsi','http://www.w3.org/2001/XMLSchema-instance');//header := RootNode.AddChild('FatturaElettronicaheader');header := XML.CreateElement('FatturaElettronicaheader','');RootNode.ChildNodes.Add(header);DatiTrasmissione := header.AddChild('DatiTrasmissione');IDTrasmittente := DatiTrasmissione.AddChild('IDTrasmittente');IDTrasmittente.AddChild('IDPaese').Text := 'IT';IDTrasmittente.AddChild('IDCodice').Text := '01234567890';DatiTrasmissione.AddChild('ProgressivoInvio').Text := '00001';DatiTrasmissione.AddChild('FormatoTrasmissione').Text := 'FPA12';DatiTrasmissione.AddChild('CodiceDestinatario').Text := 'AAAAAA';XML.Savetofile('C:\file.xml');
结果:
<?xml version="1.0" enCoding="utf-8"?><p:FatturaElettronica versione="FPA12" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <FatturaElettronicaheader> <DatiTrasmissione> <IDTrasmittente> <IDPaese>IT</IDPaese> <IDCodice>01234567890</IDCodice> </IDTrasmittente> <ProgressivoInvio>00001</ProgressivoInvio> <FormatoTrasmissione>FPA12</FormatoTrasmissione> <CodiceDestinatario>AAAAAA</CodiceDestinatario> </DatiTrasmissione> </FatturaElettronicaheader></p:FatturaElettronica>总结
以上是内存溢出为你收集整理的Delphi Berlin 10.1 IXMLDOCUMENT根节点前缀全部内容,希望文章能够帮你解决Delphi Berlin 10.1 IXMLDOCUMENT根节点前缀所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)