Bibliotecas: EasyXML - Analisador XML

 

EasyXML - Analisador XML:

EasyXML é uma Biblioteca nativa de Análise XML em MQL5. Ele pode analisar XML a partir de três fontes diferentes: URL, arquivo e string de entrada. Ele é completamente orientado a objeto e se esforça para integrar ordenadamente com MQL5, já que ele utiliza CObject e CArrayObj da biblioteca padrão em MQL5 para armazenar o DOM.

Autor: Paul van Hemmen

[Excluído]  

Consegui compilar e executar o código na primeira tentativa em meu novo MT5.

  1. 0 problemas de wininet !
  2. Códigomuito bom

Ótima contribuição, obrigado.

 

Obrigado pela boa biblioteca,

Quando tentei analisar meu documento pelo método "File Input", recebi o seguinte erro: *** Caractere inválido encontrado. Deve ser o início de uma tag aberta P:0 ***.

Depois de muita dor de cabeça e pesquisas em todo o mundo, percebi que a codificação que o analisador aceita é "UCS-2 LE BOM", portanto, é melhor mencionar isso na descrição,

Existe alguma maneira de alterar essa codificação padrão, já que meu XMl Writer usa "UTF-8-BOM"?

 

Olá novamente, encontrei uma solução para o meu caso, talvez ela ajude outras pessoas :)

Alterei uma linha da função "CEasyXml::loadXmlFromFile(string pFilename)" que pertence à classe EasyXML:

 int hFile=FileOpen(pFilename,FILE_READ|FILE_ANSI,CP_UTF8); 

ela lê meu arquivo corretamente com o formato de codificação "UTF-8-BOM".

mas ainda precisa remover os caracteres "BOM "Bytes Of Orders="ï "¿" da string com :

StringReplace(pText,"",""); 

 

Olá, estou tentando obter os dados desta página: https://www.usda.gov/oce/commodity/wasde/latest.xml, mas recebo este erro com o script example_inline_parsing: *** Caractere inválido encontrado. Deve ser o início de uma tag aberta P:0 ***
Estou apenas substituindo a url original pela url acima e o script não funciona.

Alguma ideia?

Obrigado pela atenção

 

Oi, Paulo.


Obrigado por fornecer uma excelente classe utilitária.

A propósito, você pode fazer uma cópia profunda de um objeto CEasyXmlNode com o construtor de cópia?

 

Não funciona...

E mais erros

sOutput += (ActualNode.getValue()) ? " Value: '" + ActualNode.getValue() + "'" : "";

Retorna o tipo string ActualNode.getValue()...

 

Parece haver um bug no uso de tags de fechamento automático.


Portanto, em muitos editores de XML, quando há uma tag vazia, ela é automaticamente convertida em uma tag de fechamento automático.

<element></element> 

torna-se

<element/>  or  


<element />

automaticamente.

E, de acordo com os elementos XML da w3, é legal usar tags de fechamento automático. Portanto, não sei por que elas não seriam compatíveis com a importação de documentos xml. Espero que @Liquinaut possa resolver isso.

Felizmente, no meu caso, a quantidade de tags de fechamento automático é relativamente pequena, mas e se o documento tiver centenas ou milhares de tags desse tipo?


editar: Para aqueles que desejam converter as tags de fechamento automático em tags separadas, talvez você queira usar este RegEx localizar/substituir

Localizar: (<)(\w*)(.*)(/>)

Substituir: <$2$3></$2>

[Isso é com o mecanismo .NET regEx usado no TextCrawler3. Outros mecanismos podem usar um formato diferente; experimente]. Preserva todos os atributos da tag original, se houver

XML Elements
XML Elements
  • www.w3schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
 

Olá, estou usando a biblioteca, mas recebo um erro no easyxmlnode.mqh de ponteiro inválido nessa função:

CEasyXmlNode *CEasyXmlNode::createSibling(CEasyXmlNode *pSiblingNode)
  {
   pSiblingNode.Prev(GetPointer(this));
   GetPointer(this).Next(pSiblingNode);

   ParentNode.createChild(pSiblingNode);
   return ParentNode.LastChild();
  }

Você sabe como posso resolver o erro?

 
mappi1589 ponteiro inválido nessa função:

Você sabe como posso resolver o erro?

Qual é sua entrada XML?
 
um calendário xml de fábrica de forex, ele funciona quase sempre, mas aleatoriamente mostra esse erro. Posso fazer algo para evitar o erro ou executar o código novamente se ele detectar esse erro outra vez?