Delphi Berlin 10.1 IXMLDOCUMENT根节点前缀

Delphi Berlin 10.1 IXMLDOCUMENT根节点前缀,xml,delphi,xmldocument,Xml,Delphi,Xmldocument,我试图在Delphi Berlin 10.1中创建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" xml

我试图在Delphi Berlin 10.1中创建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" 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>
...
现在的问题是我需要在根节点中有前缀p(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>

信息技术
03444630135
23
FPR12
0000000
我怎么能修好它?
谢谢。

简言之,单靠
IXMLNode.AddChild()
是无法做到这一点的

使用
AddChild()
添加新的子元素时,如果未显式指定命名空间,则新的子元素将继承其父元素的命名空间,如果父元素具有命名空间前缀,则该前缀也将被继承。这是
AddChild()
中的硬编码行为,无法更改。这就是为什么在所有子节点上都会看到
p:
前缀

如果使用以命名空间作为输入的重载
AddChild()
,则可以省略子元素上的前缀,父元素的前缀将不会被继承。但是,新的子元素将有自己的
xmlns
声明,即使名称空间与父元素的名称空间相同:

header:=RootNode.AddChild('FatturaElettronicaHeader','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');
结果:


你也不能改变这种行为

但是,有一种解决方法-在没有任何父元素或命名空间的情况下单独创建子节点,然后将其原样插入父元素,例如:

//头:=RootNode.AddChild('FatturaElettronicaHeader');
标题:=XML.CreateElement('FatturaElettronicaHeader','';
RootNode.ChildNodes.Add(头);
然后可以对后续子元素使用
AddChild()
,它们将继承
FatturaElettronicaHeader
元素不存在的命名空间,例如:

XML:=NewXMLDocument;
XML.Encoding:=“utf-8”;
选项:=[doNodeAutoIndent];
RootNode:=XML.AddChild('p:FatturaElettronica','http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2');
属性['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');
标题:=XML.CreateElement('FatturaElettronicaHeader','';
RootNode.ChildNodes.Add(头);
datitrasmissine:=header.AddChild('datitrasmissine');
idtrasmittte:=DatiTrasmissione.AddChild('idtrasmittte');
idtrasmittte.AddChild('IdPaese')。文本:='IT';
idtrasmittte.AddChild('IdCodice')。文本:='01234567890';
DatiTrasmissione.AddChild('ProgressivoInvio')。文本:='00001';
DatiTrasmissione.AddChild('formatrasmissione')。文本:='FPA12';
DatiTrasmissione.AddChild('CodiceDestinatario')。文本:='AAAAAA';
SaveToFile('C:\file.XML');
结果:


信息技术
01234567890
00001
FPA12
AAAAA

回答得很好。我也有同样的问题。谢谢!问候斯蒂凡诺桑克斯!我也有这个问题。现在没事了!我有个问题。里索托。
RootNode := XML.AddChild('p:FatturaElettronica');
<?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>