This page (revision-1) was last changed on 29-Nov-2024 16:16 by UnknownAuthor

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 added 72 lines
!!! Overview
Here are some interesting details about [DirXML Variables] Expansion.
This is some excellent details that were provided by "-Father Ramon" in a thread in the user forums.
!! Within IDM
Surrounding [DirXML Variables] with "$" or "~" work quite differently, even though in many cases the results may be the same.
! __Surrounding__ with "$"
Surrounding with "$" happens at __runtime__ and so the [DirXML Variables] is evaluated in real time.
A single or double dollar sign is evaluated at __runtime__ time. That is, when the code is executed the values are evaluated and expanded.
The form of $ expansion is used everywhere else __but NOT [XPATH]__. The expression and requires both a leading and trailing $. It is similar to ~expansion in that it results in text replacement rather than a variable reference, but differs in 3 important ways:
* It works with [Local Variables] as well as [Global Configuration Variables].
* It happens at runtime instead of load time, which means that it is expanded dynamically every time it is executed.
* When performed in a regular expression field or replacement text field, it tries to apply escaping to the value such that all the of the meta-characters within it are considered to be literals.
I say try yo because it is a known issue that it does the escaping wrong and ends up replacing the meta-character with the equivalent of \u0000 (e.g. the null character) so you will always end up with a bogus expression if your variable contained literals. I've been trying to convince somebody in a position to do so that this needs to be fixed for about a year and a half now (and that the fix is trivial), but so far with no luck.
Even if it did work correctly, what this means is that using $ expansion always results in an expression that matches the literal value of the variable and can't be used to embed wildcards or other meta-characters.
The end result of that being that you can't construct regular expressions in local variables, and you have to use ~ expansion instead of $ expansion if you want to use a GCV as a regular expression. I think it would be a great enhancement if when they fix the escaping problem, they add some additional syntax to signal that you want to expand in a
regex without escaping, maybe something like $!variable!$.
! __Surrounding__ with "~"
Surrounding with "~" works at replaced at driver startup time which is policy __load time__ and replaces the text in-line before the policy is even parsed. This is as if the replacement text was part of the policy. This is essentially equivalent to C/C++ macro expansion of constants created with #define.
! __Leading__ with "$"
The leading "$" is used __only__ in [XPATH] Expressions.
Leading with a "$" in [XPATH] happens at __runtime__ and so the [DirXML Variables] is evaluated in real time.
A single or double dollar sign is evaluated at __runtime__ time. That is, when the code is executed the values are evaluated and expanded.
!! Variables in [XPATH]
The following can be used in [XPATH] Expressions:
* leading "$" is used __only__ in [XPATH] Expressions -
* Surrounding with "~" - Gets all the Child Nodes Values for ~abc~
* Surrounding with "~" with Quotes '~abc~' - Gets the string Value for ~abc~
A leading "$" is a [DirXML Variables] reference and is used on [Global Configuration Variables] and [Local Variables].
For example, if you have [Global Configuration Variables] abc that contains the string "xyz", then the expression:
{{{
$abc
results in the string "XYZ"
}}}
but the expression
{{{
~abc~
results in the expression
"xyz"
}}}
Surrounding with "~" works at replaced at driver startup time which is policy __load time__ and replaces the text before the policy is even parsed, so it is as if the replacement text was part of the policy.
which is shorthand for:
{{{
child::xyz
}}}
Which selects all the abc elements that are children of the context node.
To get a string from ~ expansion, you would need.
{{{
'~abc~'
which would expand to:
'xyz'
}}}
which is a string literal.
!! More Information
There might be more information for this subject on one of the following:
[{ReferringPagesPlugin before='*' after='\n' }]