ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

This content has been translated automatically.  Click here  to view the French version.
Help / WLanguage / WLanguage functions / Standard functions / XML file functions
  • Searching and browsing XML documents
  • XML functions and threads
  • Deleting an element during a search
WINDEV
WindowsLinuxJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadIOS WidgetApple WatchMac Catalyst
Others
Stored procedures
Performs a search in an XML document. This search can be canceled by XMLCancelSearch.
Note: To perform an XPath query, use the XMLExecuteXPath function..
// Search from current position
XMLFind("XMLDoc", "pri", XMLTag + XMLChildItem, XMLStartWith)
WHILE XMLFound("XMLDoc") = True
	Info("Tag found " + XMLElementName("DocXML"))
	// Next element in the search
	XMLNext("XMLDoc")
END
XMLCancelSearch("XMLDoc")
// Positions at the root of document
XMLRoot("XMLDoc")
// Exact-match search from the beginning of document
XMLFind("XMLDoc", "price", XMLTag + XMLContinue, XMLExact)
WHILE XMLFound("XMLDoc") = True
	Info("Tag found " + XMLElementName("DocXML"))
	// Next element in the search
	XMLNext("XMLDoc")
END
XMLCancelSearch("XMLDoc")
Syntax
<Result> = XMLFind(<XML document> , <Search value> [, <Type of iteration> [, <Search options>]])
<Result>: Boolean
  • True if the sought element is found,
  • False otherwise.
<XML document>: Character string
Name of the XML document used. This document contains the XML code to study and it was created by XMLDocument.
<Search value>: Character string (with quotation mark) or NULL keyword
Value sought in the XML document.
If this parameter is set to NULL, all the tags and attributes of the XML document will be read from the current element, according to the search criteria.
<Type of iteration>: Optional constant (or combination of constants)
Type of iteration to perform:
XMLAttributeSearch performed on the names of attributes.
XMLChildItemSearch performed in all the child tags. Must be combined with XMLTag, XMLAttribute or XMLValue.
XMLContinue
  • Combined with XMLTag, XMLAttribute or XMLValue, continues the search in the rest of document while moving up in the levels of the tree structure (if necessary).
  • Combined with XMLChildItem, continues the search in the rest of the document while moving up and down in the levels of the tree structure.
XMLCurrentLevelSearch performed in the current level of tree structure.
XMLElement
(Default value)
Search performed on the names of tags and attributes (equivalent to XMLTag + XMLAttribute).
XMLTagSearch performed on the names of tags.
XMLValueSearch performed on the values of tags and attributes.
<Search options>: Optional constant (or combination of constants)
Search options that will be taken into account:
XMLContainsSearch performed on the elements containing the sought value.
XMLExact
(default value)
Exact-match and case-sensitive search.
XMLIgnoreCaseSearch ignoring the case of the tag. Can be combined with XMLContains, XMLStartWith or XMLExact.
XMLStartWithSearch performed on the elements starting with the sought value.
XMLWithNamespaceSearch performed on the elements containing a namespace.
WEBDEV - Browser code This constant is not available.
Remarks

Searching and browsing XML documents

XMLFind starts the search from the current position in the XML document. To search in the entire document, it is recommended to use XMLRoot before using XMLFind.
XMLFind affects the current search. XMLNext and XMLPrevious will be positioned on the next and previous elements corresponding to the search. If the search fails (no element found), the current position before the beginning of the search is kept.
To cancel the search, use XMLCancelSearch. Furthermore, XMLFirst, XMLLast, XMLRoot, XMLParent and XMLChild cancel the current search.

XML functions and threads

If your application uses threads, the XML document is shared between all these threads. For more details on threads, see Managing threads.
If the current position in an XML document is modified in a thread, the current position in this XML document is modified for all the threads.

Deleting an element during a search

XMLDelete used during a search cancels the search.
Example to avoid (this code does not operate):
// Positions at the root of document
XMLRoot(:m_sDocName)
// Finds all the "txsr" from the root in order to delete them
XMLFind(:m_sDocName, CParagraph::CST_TAG, XMLTag + XMLChildItem + XMLContinue, XMLExact)
WHILE XMLFound(:m_sDocName) = True
	XMLDelete(:m_sDocName)
	// Next element in the search
	XMLNext(:m_sDocName)
END
XMLCancelSearch(:m_sDocName)
The following code must be used:
// Deletion during a search
// Positions at the root of document 
XMLRoot(:m_sDocName)
LOOP
	// Finds all the "txsr" from the root in order to delete them 
	XMLFind(:m_sDocName, CParagraph::CST_TAG , ...
					  XMLTag + XMLChildItem + XMLContinue, XMLExact)
	IF XMLFound(:m_sDocName) = True THEN
		XMLDelete (:m_sDocName)
	ELSE
		BREAK
	END
END
Component: wd300xml.dll
Minimum version required
  • Version 9
This page is also available for…
Comments
Video XmlFind
https://youtu.be/v3TCiIa6ZbU

https://windevdesenvolvimento.blogspot.com/2019/04/dicas-2079-windevxml22lerduplicatasnotas.html

//
EDT_XML=fLoadText(EDT_procura_xml)// estou lendo o conteudo do xml, que encontramos
XMLDocument("xml_notas",EDT_XML)
XMLFind("xml_notas",Null,XMLContinue+XMLChildItem)
TableDeleteAll(TABLE_DUPLICATA)
nome_tag is string=""
sNumero_duplicata is string=""
WHILE XMLFound("xml_notas")
SWITCH XMLElementType("xml_notas")
CASE XMLTag :
nome_tag = XMLElementName("xml_notas")
SWITCH nome_tag
CASE "nDup"
sNumero_duplicata=(XMLData("xml_notas"))
OTHER CASE
END
IF sValor_duplicata<>"" THEN
TableAddLine(TABLE_DUPLICATA,sNumero_duplicata,sData_vencimento,sValor_duplicata)
sNumero_duplicata=""
END
END
XMLNext("xml_notas")
END
amarildo
19 Apr. 2019
LER ITEM XML
TableDeleteAll(TABLE_NSU)
sNome_tag is string=""
sNome_Atributo is string=""
s_meu_xml is string=EDT_xml //s_meu_xml is string=fLoadText(s_xml_documento)
XMLDocument("XML",s_meu_xml)
EDT_tpAmb=XMLRead("XML","/retDistDFeInt/tpAmb")
XMLFind("XML",Null,XMLContinue+XMLChildItem)
WHILE XMLFound("XML")
SWITCH XMLElementType("XML")
CASE XMLTag :
sNome_tag = XMLElementName("XML")
CASE XMLAttribute
IF sNome_tag="docZip" THEN
sNome_Atributo = XMLData("XML")
IF IsNumeric(sNome_Atributo) THEN
TableAddLine(TABLE_NSU,sNome_Atributo)
END
END
END
XMLNext("XML")
END
XMLClose("XML")

// BLOG COM VIDEO E EXEMPLO

http://windevdesenvolvimento.blogspot.com.br/2017/06/aula-1187-windev-010-xml-leritensxml.html

https://www.youtube.com/watch?v=8PcM8hBEM0w



De matos
24 Jun. 2017

Last update: 09/30/2024

Send a report | Local help