Jump to content

Recommended Posts

Posted

Seeing as how this is an XML file, you might want to take a look at this UDF that might make it easier than a RegEx.

 

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Posted

KingBob,

 

I read that article you directed me to.  Most of it seems to be a discussion on how to write the udf.  Honestly I'd rather stick to regex.  That doesn't mean I don't appreciate your help though.  If there is a way to make regexp work, I'm all for it.  If however someone tells me it can't work no matter what then I guess I'll try to figure out that other article.

 

Thanks, 

Bounty2k3

Posted

The link I posted is a download link to the XML UDF that will allow you to get the information from an XML file without having to resort to using a regex. XML files can be read like an INI file using this UDF instead of trying to parse it yourself.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Posted

The most convenient way which solves both issues is to use StringRegExp instead of StringRegExpReplace
The results are then stored in an array :

$aResult = StringRegExp($RECORDDATAXML, "<RogNode>(.*?)</RogNode>", 3)

If not IsArray($aResult) Then   ; error checking - no match found
    ; ...    
Else     ; 1 or more matches, could be enumerated using a For loop
    For $i = 0 to UBound($aResult)-1
        Msgbox(0,"", $aResult[$i]
    Next
EndIf

 

Posted

OR even better...

$aResult = StringRegExp($RECORDDATAXML, "<RogNode>(.*?)</RogNode>", $STR_REGEXPARRAYGLOBALMATCH)
If @error Then ; Error checking - no match found
    ; ...    
Else
    ; 1 or more matches, could be enumerated using a For loop
    For $i = 0 to UBound($aResult) - 1
        Msgbox($MB_SYSTEMMODAL, "", $aResult[$i])
    Next
EndIf

 

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

  • 1 month later...
Posted

I will try both of those suggestions.  I do have a question though first.  Might make it easier if I ask this first.

Since I'm using RegExpReplace (which has been working very well).  Is there a way to part way through the node make it search for anything before the first >?

I'll give an example.

$SOCODE1 = StringRegExpReplace($GETSOCODES2, "(?s).*<RogComplCd1>(.*)</RogComplCd1>.*", "$1")



Question:

    $SOCODE1 = StringRegExpReplace($GETSOCODES2, "(?s).*<RogComplCd1////here////>(.*)</RogComplCd1>.*", "$1")

where I put in ////here////......   Sort of like (*.*)?

Posted

Using the regexp is trying to like trying to re-invent a wheel that is xmldom:

$sXML = '<root>' & @CRLF & _
'   <RogEquipSerialNum HasChanged="0">blah</RogEquipSerialNum>' & @CRLF & _
'   <RogEquipSerialNum HasChanged="0">blah2</RogEquipSerialNum>' & @CRLF & _
'   <RogEquipSerialNum HasChanged="1">blah3</RogEquipSerialNum>' & @CRLF & _
'</root>'
Local $oXML = ObjCreate("Microsoft.XMLDOM")
$oXML.loadxml($sXML)
$oSerialNums = $oXML.SelectNodes('//RogEquipSerialNum[@HasChanged="0"]')

For $oSerialNum In $oSerialNums

    ; only enter here if one is found...that solves issue #1
    $oSerialNum.text = $oSerialNum.text & "AppendedText"
Next

; to show the value updated...notice that the 3rd one doesn't update, because the attrib doesn't match
ConsoleWrite($oXml.xml)

console output:

<root>
 <RogEquipSerialNum HasChanged="0">blahAppendedText</RogEquipSerialNum>
 <RogEquipSerialNum HasChanged="0">blah2AppendedText</RogEquipSerialNum>
 <RogEquipSerialNum HasChanged="1">blah3</RogEquipSerialNum>
</root>

 

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...