Как мне поместить приведенные ниже атрибуты в узел envideclaracaoautodesembaraco моего кода VBA. Я хочу, чтобы мой файл .xml генерировал те же атрибуты, что и в примере ниже.
<enviDeclaracaoAutodesembaraco
xmlns = "http://www.sefaz.am.gov.br/autodesembaraco"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.sefaz.am.gov.br/autodesembaraco enviDeclaracaoMensalAuto_v1.02.xsd">
<infDeclaracaoMensal versao = "01">
<ieContribuinteDeclarante>063010712</ieContribuinteDeclarante>
<anoApresentacao>2024</anoApresentacao>
<mesApresentacao>01</mesApresentacao>
<nomeResponsavel>RAI RODRIGUES</nomeResponsavel>
<foneResponsavel>0000000000</foneResponsavel>
<emailResponsavel>[email protected]</emailResponsavel>`
...snip...
Изображение атрибутов в XML-файле:
Ниже моих кодов, которые экспортируют XML-файл в VBA:
Sub xmlExport()
'On Error GoTo ErrHandle
Dim doc As New MSXML2.DOMDocument60, xslDoc As New MSXML2.DOMDocument60, newDoc As New MSXML2.DOMDocument60
Dim root As IXMLDOMNode, ItemNode As IXMLDOMNode, yinstanceNode As IXMLDOMNode, UFNode As IXMLDOMElement
Dim DiaAtributos As IXMLDOMAttribute, Atributos As IXMLDOMAttribute, NFatributos As IXMLDOMAttribute
Dim Reconhecer As IXMLDOMElement, ValorBs As IXMLDOMElement, chave As IXMLDOMElement, NumNotas As IXMLDOMElement
Dim NumItens As IXMLDOMElement, Produtos As IXMLDOMElement, NumItemNFe As IXMLDOMElement
Dim CodInterno As IXMLDOMElement, IndGeral As IXMLDOMElement, IndGeralProdutos As IXMLDOMElement
Dim TipoTributação As IXMLDOMElement, Multiplicador As IXMLDOMElement, ValorImposto As IXMLDOMElement
Dim NumeroAtributo As IXMLDOMAttribute, civilityAttrib As IXMLDOMAttribute
Dim IE As IXMLDOMElement, Ano As IXMLDOMElement, Mes As IXMLDOMElement, Nome As IXMLDOMElement, Fone As IXMLDOMElement, Email As IXMLDOMElement
Dim ListaNF As IXMLDOMElement, NF As IXMLDOMElement
Dim nmsp As String
Dim g As Long
' NODE PAI '
nmsp = "http://www.sefaz.am.gov.br/autodesembaraco"
Set root = doc.createElement("enviDeclaracaoAutodesembaraco")
doc.appendChild root
Set DiaAtributos = doc.createAttribute("xsischemaLocation")
DiaAtributos.Value = "http://www.sefaz.am.gov.br/autodesembaraco enviDeclaracaoMensalAuto_v1.02.xsd"
root.Attributes.setNamedItem DiaAtributos
Set ItemNode = doc.createElement("infDeclaracaoMensal")
root.appendChild ItemNode
Set Atributos = doc.createAttribute("versao")
Atributos.Value = "01"
ItemNode.Attributes.setNamedItem Atributos
Set IE = doc.createElement("ieContribuinteDeclarante")
IE.Text = Range("b2").Value
ItemNode.appendChild IE
Set Ano = doc.createElement("anoApresentacao")
Ano.Text = Range("c2").Value
ItemNode.appendChild Ano
Set Mes = doc.createElement("mesApresentacao")
Mes.Text = Range("d2").Value
ItemNode.appendChild Mes
Set Nome = doc.createElement("nomeResponsavel")
Nome.Text = Range("e2").Value
ItemNode.appendChild Nome
Set Fone = doc.createElement("foneResponsavel")
Fone.Text = Range("f2").Value
ItemNode.appendChild Fone
Set Email = doc.createElement("emailResponsavel")
Email.Text = Range("g2").Value
ItemNode.appendChild Email
Set ListaNF = doc.createElement("listaNotasFiscais")
ItemNode.appendChild ListaNF
For g = 2 To Sheets(1).UsedRange.Rows.Count
NumeroItemNfe = Cells(g, 15)
If NumeroItemNfe = 1 Then
Set NF = doc.createElement("notaFiscal")
ListaNF.appendChild NF
Set NFatributos = doc.createAttribute("numOrdemNota")
NFatributos.Value = Range("h" & g)
NF.setAttributeNode NFatributos
Set chave = doc.createElement("chaveNFe")
chave.Text = Range("j" & g)
NF.appendChild chave
Set Reconhecer = doc.createElement("reconheceNFe")
Reconhecer.Text = Range("L" & g)
NF.appendChild Reconhecer
Set NumItens = doc.createElement("numItens")
NumItens.Text = Range("M" & g)
NF.appendChild NumItens
'Else
'GoTo ProximaInteracao
End If
'ProximaInteracao:
Set Produtos = doc.createElement("produto")
NF.appendChild Produtos
Set NumItemNFe = doc.createElement("numItemNFe")
NumItemNFe.Text = Range("O" & g)
Produtos.appendChild NumItemNFe
Set CodInterno = doc.createElement("codInternoProduto")
CodInterno.Text = Range("P" & g)
Produtos.appendChild CodInterno
Set IndGeral = doc.createElement("indiceCodGeralProduto")
IndGeral.Text = Range("Q" & g)
Produtos.appendChild IndGeral
Set IndGeralProdutos = doc.createElement("codGeralProduto")
IndGeralProdutos.Text = Range("R" & g)
Produtos.appendChild IndGeralProdutos
Set TipoTributação = doc.createElement("codTipoTributacao")
TipoTributação.Text = Range("S" & g)
Produtos.appendChild TipoTributação
Set ValorBs = doc.createElement("valorBaseCalculoItem")
ValorBs.Text = Replace(Format(Range("T" & g), "0.00"), ",", ".")
Produtos.appendChild ValorBs
Set Multiplicador = doc.createElement("valorMultiplicador")
Multiplicador.Text = Replace(Format(Range("U" & g), "0.00"), ",", ".")
Produtos.appendChild Multiplicador
Set ValorImposto = doc.createElement("valorImpostoDeclarado")
ValorImposto.Text = Replace(Format(Range("V" & g), "0.00"), ",", ".")
Produtos.appendChild ValorImposto
Next g
Set NumNotas = doc.createElement("numNotasArquivo")
NumNotas.Text = Range("W2").Value
ItemNode.appendChild NumNotas
xslDoc.LoadXML "<?xml version = " & Chr(34) & "1.0" & Chr(34) & "?>" _
& "<xsl:stylesheet version = " & Chr(34) & "1.0" & Chr(34) _
& " xmlns:xsl = " & Chr(34) & "http://www.w3.org/1999/XSL/Transform" & Chr(34) & ">" _
& "<xsl:strip-space elements = " & Chr(34) & "*" & Chr(34) & " />" _
& "<xsl:output method = " & Chr(34) & "xml" & Chr(34) & " indent = " & Chr(34) & "yes" & Chr(34) & "" _
& " encoding = " & Chr(34) & "UTF-8" & Chr(34) & "/>" _
& " <xsl:template match = " & Chr(34) & "node() | @*" & Chr(34) & ">" _
& " <xsl:copy>" _
& " <xsl:apply-templates select = " & Chr(34) & "node() | @*" & Chr(34) & " />" _
& " </xsl:copy>" _
& " </xsl:template>" _
& "</xsl:stylesheet>"
xslDoc.async = False
doc.transformNodeToObject xslDoc, newDoc
newDoc.Save baseDirectory & projectName & "C:\Users\raI\Downloads\DIA.xml"
MsgBox "Arquivo XML gerado com sucesso!", vbInformation
Exit Sub
'ErrHandle:
'MsgBox Err.Number & " - " & Err.Description, vbCritical
Exit Sub
End Sub
Приведенные выше коды в Visual Basic для экспорта приложения в XML-файл данных Excel.
Как выглядел XML-файл после изменения кода согласно предложению.
<enviDeclaracaoAutodesembaraco xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://www.sefaz.am.gov.br/autodesembaraco" xsi:schemaLocation = "http://www.sefaz.am.gov.br/autodesembaraco enviDeclaracaoMensalAuto_v1.02.xsd">
<infDeclaracaoMensal xmlns = "" versao = "01">
Спасибо за подсказку, я здесь новичок и еще не разбираюсь в том, как пользоваться платформой.
К вашему сведению, создание большого количества XML-элементов шаг за шагом может оказаться довольно повторяющимся: рассмотрите один или два служебных метода для обработки повторяющихся частей за один вызов. Например, см. CreateWithAttributes здесь - stackoverflow.com/a/70089478/478884


Я думаю, что основные проблемы, с которыми вы столкнулись, - это добавление атрибутов к корневому элементу:
xmlns = "http://www.sefaz.am.gov.br/autodesembaraco" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation = "http://www.sefaz.am.gov.br/autodesembaraco enviDeclaracaoMensalAuto_v1.02.xsd"Проблема заключалась в том, как вы создаете местоположение схемы пространств имен:
Dim doc As New MSXML2.DOMDocument60
Dim root As IXMLDOMNode
Dim nmsp As String, xsi As String, schemaLocation As String
' namespaces and schema location
nmsp = "http://www.sefaz.am.gov.br/autodesembaraco"
xsi = "http://www.w3.org/2001/XMLSchema-instance"
schemaLocation = "http://www.sefaz.am.gov.br/autodesembaraco enviDeclaracaoMensalAuto_v1.02.xsd"
' Create the root element - with namespace - by using createNode (NODE_ELEMENT = 1)
Set root = doc.createNode(NODE_ELEMENT, "enviDeclaracaoAutodesembaraco", nmsp)
doc.appendChild root
xsi:' Add xmlns:xsi attribute
Set xsiAttr = doc.createAttribute("xmlns:xsi")
xsiAttr.Value = xsi
root.Attributes.setNamedItem xsiAttr
schemaLocation:' Add xsi:schemaLocation attribute
Set schemaLocationAttr = doc.createAttribute("xsi:schemaLocation")
schemaLocationAttr.Value = schemaLocation
Привет, Ян, как дела? Большое спасибо за помощь, я сделал как вы посоветовали, атрибуты появились, но перед атрибутом "xmlns" появляется атрибут "xmlns:xsi", могу ли я это преобразовать? Другой вопрос: в узле «infDeclaraçãoMonsal» атрибут «xmlns» отображается за атрибутом «version: 01». Можно ли каким-либо образом удалить этот атрибут xmlns из этого узла? Я отвечу на свой вопрос, объяснив, как это произошло.
@RaíRodrigues Можете ли вы показать XML, который вы сейчас получаете - не весь; только корневой элемент и его атрибуты.
Второй выпуск: stackoverflow.com/questions/13220095/…
@IanBoyd Я разместил запрошенную информацию в конце своего вопроса.
Вам следует избегать написания всего вопроса ЗАГЛАВНЫМИ БУКВАМИ - обычно это считается КРИКОМ на вашу аудиторию, это грубо и оскорбительно и значительно снижает ваши шансы на то, что люди потратят время, чтобы прочитать ваш вопрос и дать ответ. Не делай этого – просто не делай этого.