Ir para conteúdo
Fórum Script Brasil
  • 0

Como modificar informações de um XML nessa estrutura usando php e gerar um novo arquivo xml


Danielamarques

Pergunta

Olá. Espero que estejam todos bem. Eu tenho o seguinte arquivo XML (1.xml),  com essa estrutura atípica :

<?xml version="1.0" encoding="UTF-8"?>

<pt:body currentSheet="Folha 1" direction="LTR">
    <style:sheet name="Folha 1">
    <pt:objects>
    <barcode:barcode>
    <pt:data>text1</pt:data>
    </barcode:barcode>
    <text:text>
        <text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/>
        <text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/>
        <text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="6pt" combinedChars="false"/>
        <pt:data>text2</pt:data>
        <text:stringItem charLen="1"></text:stringItem>
    </text:text>
    <text:text><pt:data>text3</pt:data></text:text>
        </pt:objects></style:sheet>
        </pt:body>

Qual é a melhor maneira de alterar "text1", "text2" e "text3" para "item1", "item2" e "item3" , exibir o resultado na tela e gerar um novo arquivo xml chamado "1edit.xml"
Fiz algumas tentativas usando o SimpleXMLElement, mas sem sucesso.

Desde já muito obrigado a todos

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Usei o editor de texto e pedi para ele eliminar todos os prefixos text: , pt: , barcode: , style:, e o novo arquivo ficou assim:

<?xml version="1.0" encoding="UTF-8"?>

<body currentSheet="Folha 1" direction="LTR">
    <sheet name="Folha 1">
    <objects>
    <barcode>
    <data>text1</data>
    </barcode>
    <text>
        <textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/>
        <textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/>
        <textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="6pt" combinedChars="false"/>
        <data>text2</data>
        <stringItem charLen="1"></stringItem>
    </text>
    <text><data>text3</data></text>
        </objects></sheet>
        </body>

Eu acredito que depois dessa modificação, você consegue trabalhar com as ferramentas do PHP voltado para o XML. Ou você precisa definir os prefixos assim: XML Namespaces (w3schools.com)

Screenshot_1.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
6 minutos atrás, Frank K Hosaka disse:

Usei o editor de texto e pedi para ele eliminar todos os prefixos text: , pt: , barcode: , style:, e o novo arquivo ficou assim:

<?xml version="1.0" encoding="UTF-8"?>

<body currentSheet="Folha 1" direction="LTR">
    <sheet name="Folha 1">
    <objects>
    <barcode>
    <data>text1</data>
    </barcode>
    <text>
        <textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/>
        <textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/>
        <textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="6pt" combinedChars="false"/>
        <data>text2</data>
        <stringItem charLen="1"></stringItem>
    </text>
    <text><data>text3</data></text>
        </objects></sheet>
        </body>

Eu acredito que depois dessa modificação, você consegue trabalhar com as ferramentas do PHP voltado para o XML.
 

Screenshot_1.png

Olá Frank Hosaka, essa o XML com essa estrutura é um arquivo interno de outro arquivo .lbx, gerado por um aplicativo industrial. O objetivo final é através de PHP, alterar 3 informações "pt:data" desse arquivo XML extraído do .lbx e recoloca-lo dentro de um novo arquivo .lbx. Esse arquivo .lbx pode ser aberto e fechado com um programa zip.

Com PHP já consegui desmembrar os 3 arquivos dentro do .lbx, exibir a informação que preciso e junta-los novamente dentro do .lbx, esbarrei em minha dificuldade em lidar com xml de estrutura menos comum como esse.

arquivo.jpg

Link para o comentário
Compartilhar em outros sites

  • 0
Em 16/04/2023 em 22:48, Frank K Hosaka disse:

Mas na hora que você divide o .lbx não dá para ver nenhum atributo xlmns que define o namespace do prefixo pt: ?

 

<?xml version="1.0" encoding="UTF-8"?><pt:document xmlns:pt="http://schemas.brother.info/ptouch/2007/lbx/main" xmlns:style="http://schemas.brother.info/ptouch/2007/lbx/style" xmlns:text="http://schemas.brother.info/ptouch/2007/lbx/text" xmlns:draw="http://schemas.brother.info/ptouch/2007/lbx/draw" xmlns:image="http://schemas.brother.info/ptouch/2007/lbx/image" xmlns:barcode="http://schemas.brother.info/ptouch/2007/lbx/barcode" xmlns:database="http://schemas.brother.info/ptouch/2007/lbx/database" xmlns:table="http://schemas.brother.info/ptouch/2007/lbx/table" xmlns:cable="http://schemas.brother.info/ptouch/2007/lbx/cable" version="1.7" generator="P-touch Editor 5.4.007 Windows"><pt:body currentSheet="Folha 1" direction="LTR"><style:sheet name="Folha 1"><style:paper media="0" width="68pt" height="2834.6pt" marginLeft="2pt" marginTop="2.8pt" marginRight="2pt" marginBottom="2.8pt" orientation="portrait" autoLength="true" monochromeDisplay="true" printColorDisplay="false" printColorsID="0" paperColor="#FFFFFF" paperInk="#000000" split="1" format="261" backgroundTheme="0" printerID="28464" printerName="Brother PT-P900W"/><style:cutLine regularCut="0pt" freeCut=""/><style:backGround x="2pt" y="2.8pt" width="64pt" height="66.4pt" brushStyle="NULL" brushId="0" userPattern="NONE" userPatternId="0" color="#000000" printColorNumber="1" backColor="#FFFFFF" backPrintColorNumber="0"/><pt:objects><barcode:barcode><pt:objectStyle x="10pt" y="20.8pt" width="46.4pt" height="46.4pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="INSIDEFRAME" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="barras" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><barcode:barcodeStyle protocol="QRCODE" lengths="48" zeroFill="false" barWidth="1.2pt" barRatio="1:3" humanReadable="true" humanReadableAlignment="LEFT" checkDigit="false" autoLengths="true" margin="true" sameLengthBar="false" bearerBar="false"/><barcode:qrcodeStyle model="2" eccLevel="15%" cellSize="1.6pt" mbcs="auto" joint="1" version="auto"/><pt:data>qrcode de teste</pt:data></barcode:barcode><text:text><pt:objectStyle x="14pt" y="4.8pt" width="38.1pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="modelo" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>ABCDEFG</pt:data><text:stringItem charLen="7"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text><text:text><pt:objectStyle x="14pt" y="12.8pt" width="38.3pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="serie" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>123456789</pt:data><text:stringItem charLen="9"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text></pt:objects></style:sheet></pt:body></pt:document>

Olá Frank, esse é o xml original completo, com os atributos que definem o namespace dos prefixos

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, Danielamarques disse:

 

<?xml version="1.0" encoding="UTF-8"?><pt:document xmlns:pt="http://schemas.brother.info/ptouch/2007/lbx/main" xmlns:style="http://schemas.brother.info/ptouch/2007/lbx/style" xmlns:text="http://schemas.brother.info/ptouch/2007/lbx/text" xmlns:draw="http://schemas.brother.info/ptouch/2007/lbx/draw" xmlns:image="http://schemas.brother.info/ptouch/2007/lbx/image" xmlns:barcode="http://schemas.brother.info/ptouch/2007/lbx/barcode" xmlns:database="http://schemas.brother.info/ptouch/2007/lbx/database" xmlns:table="http://schemas.brother.info/ptouch/2007/lbx/table" xmlns:cable="http://schemas.brother.info/ptouch/2007/lbx/cable" version="1.7" generator="P-touch Editor 5.4.007 Windows"><pt:body currentSheet="Folha 1" direction="LTR"><style:sheet name="Folha 1"><style:paper media="0" width="68pt" height="2834.6pt" marginLeft="2pt" marginTop="2.8pt" marginRight="2pt" marginBottom="2.8pt" orientation="portrait" autoLength="true" monochromeDisplay="true" printColorDisplay="false" printColorsID="0" paperColor="#FFFFFF" paperInk="#000000" split="1" format="261" backgroundTheme="0" printerID="28464" printerName="Brother PT-P900W"/><style:cutLine regularCut="0pt" freeCut=""/><style:backGround x="2pt" y="2.8pt" width="64pt" height="66.4pt" brushStyle="NULL" brushId="0" userPattern="NONE" userPatternId="0" color="#000000" printColorNumber="1" backColor="#FFFFFF" backPrintColorNumber="0"/><pt:objects><barcode:barcode><pt:objectStyle x="10pt" y="20.8pt" width="46.4pt" height="46.4pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="INSIDEFRAME" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="barras" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><barcode:barcodeStyle protocol="QRCODE" lengths="48" zeroFill="false" barWidth="1.2pt" barRatio="1:3" humanReadable="true" humanReadableAlignment="LEFT" checkDigit="false" autoLengths="true" margin="true" sameLengthBar="false" bearerBar="false"/><barcode:qrcodeStyle model="2" eccLevel="15%" cellSize="1.6pt" mbcs="auto" joint="1" version="auto"/><pt:data>qrcode de teste</pt:data></barcode:barcode><text:text><pt:objectStyle x="14pt" y="4.8pt" width="38.1pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="modelo" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>ABCDEFG</pt:data><text:stringItem charLen="7"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.8pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text><text:text><pt:objectStyle x="14pt" y="12.8pt" width="38.3pt" height="8.7pt" backColor="#FFFFFF" backPrintColorNumber="0" ropMode="COPYPEN" angle="0" anchor="TOPLEFT" flip="NONE"><pt:pen style="NULL" widthX="0.5pt" widthY="0.5pt" color="#000000" printColorNumber="1"/><pt:brush style="NULL" color="#000000" printColorNumber="1" id="0"/><pt:expanded objectName="serie" ID="0" lock="0" templateMergeTarget="LABELLIST" templateMergeType="NONE" templateMergeID="0" linkStatus="NONE" linkID="0"/></pt:objectStyle><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo><text:textControl control="FREE" clipFrame="false" aspectNormal="false" shrink="false" autoLF="false" avoidImage="false"/><text:textAlign horizontalAlignment="JUSTIFY" verticalAlignment="CENTER" inLineAlignment="BASELINE"/><text:textStyle vertical="false" nullBlock="false" charSpace="0" lineSpace="0" orgPoint="8pt" combinedChars="false"/><pt:data>123456789</pt:data><text:stringItem charLen="9"><text:ptFontInfo><text:logFont name="Arial" width="3.4pt" italic="false" weight="400" charSet="0" pitchAndFamily="34"/><text:fontExt effect="NOEFFECT" underline="0" strikeout="0" size="7.7pt" orgSize="28.8pt" textColor="#000000" textPrintColorNumber="1"/></text:ptFontInfo></text:stringItem></text:text></pt:objects></style:sheet></pt:body></pt:document>

Olá Frank, esse é o xml original completo, com os atributos que definem o namespace dos prefixos

Eu acho que consegui:

<?php
$dom=new DOMDocument();
$dom->load('1.xml');
$xpath=new DOMXPath($dom);
$elements=$xpath->query("//pt:data");
foreach($elements as $element){echo $element->textContent."<br>";}
foreach($elements as $element){$element->textContent="Frank";}
foreach($elements as $element){echo $element->textContent."<br>";}

// resultado:
qrcode de teste
ABCDEFG
123456789
Frank
Frank
Frank

O problema é que eu devo ter alterado coisa que não devia como o "qrcode de teste", mas acho que o mais difícil eu consegui.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...