Repository navigation
Expand file tree
/
Copy pathshell-api-xslt.sh
More file actions
140 lines (128 loc) · 4.17 KB
/
Copy pathshell-api-xslt.sh
File metadata and controls
140 lines (128 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
###############################################################################
#
# Copyright (c) 2024 Michel Mehl. All rights reserved.
#
# -----------------------------------------------------------------------------
#
# Report bugs to michel.mehl@slashetc.fr
#
# -----------------------------------------------------------------------------
#
###############################################################################
__SHELL_API_XSLT_DIR__=$(readlink -f $(dirname ${BASH_SOURCE[0]}))
source "${__SHELL_API_XSLT_DIR__}/shell-api-core.sh"
if _loaded "${BASH_SOURCE[0]}" ; then
return 0
fi
:<<EOF
EOF
XSLT__modifyXML() {
local sourceXML="$1"
local transformCode="$2"
shift 2
#_log "XSLT__modifyXML : ALL ARGS: $@"
local parameters=() #=($@) # Init directly caused a problem with arg forwardlink:<url>
while [ $# -gt 0 ] ; do
parameters+=("$1")
shift
done
local paramNames=()
local paramValues=()
local i
local xsltCmdLineParams=()
local xsltCodeParams=()
#_log "XSLT__modifyXML remaining args: ${parameters[@]}"
for p in "${parameters[@]}" ; do
local paramName
local paramValue
Str__split "$p" paramName ":" paramValue 1
paramNames+=("$paramName")
paramValues+=("$paramValue")
xsltCmdLineParams+=(" --stringparam ${paramName} '${paramValue}'")
xsltCodeParams+=(" <xsl:param name=\"${paramName}\" select=\"''\"/>")
done
local xsltFile=""
local newXML=""
File__createTempFile xsltFile xslt
File__createTempFile newXML
#local escapedTransformCode="$(echo "$transformCode"|sed -E 's/"/\\"/g')"
cat<<EOF > "${xsltFile}"
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
${xsltCodeParams[@]}
${transformCode}
</xsl:stylesheet>
EOF
#echo "${transformCode}" >> "${xsltFile}"
#echo "</xsl:stylesheet>" >> "${xsltFile}"
#_log "XSLT file content '${xsltFile}'"
#cat "${xsltFile}"
#return 0
local cmd="xsltproc --path . ${xsltCmdLineParams[@]} \"${xsltFile}\" \"${sourceXML}\""
#_log "Executing $cmd"
#xsltproc --path "." ${xsltCmdLineParams[@]} "${xsltFile}" "${sourceXML}" > "${newXML}"
_logf "COMMAND: '$cmd'"
eval "$cmd" > "${newXML}"
if [ $? -eq 0 ] ; then
mv "${newXML}" "${sourceXML}"
else
rm "${newXML}"
fi
rm "${xsltFile}"
}
# NOT TESTED
#
XSLT__transformToText() {
local sourceXML="$1"
local transformCode="$2"
local -n __out_result=$3
shift 2
#_log "XSLT__modifyXML : ALL ARGS: $@"
local parameters=() #=($@) # Init directly caused a problem with arg forwardlink:<url>
while [ $# -gt 0 ] ; do
parameters+=("$1")
shift
done
local paramNames=()
local paramValues=()
local i
local xsltCmdLineParams=()
local xsltCodeParams=()
#_log "XSLT__modifyXML remaining args: ${parameters[@]}"
for p in "${parameters[@]}" ; do
local paramName
local paramValue
Str__split "$p" paramName ":" paramValue 1
paramNames+=("$paramName")
paramValues+=("$paramValue")
xsltCmdLineParams+=(" --stringparam ${paramName} '${paramValue}'")
xsltCodeParams+=(" <xsl:param name=\"${paramName}\" select=\"''\"/>")
done
local xsltFile=""
File__createTempFile xsltFile xslt
#local escapedTransformCode="$(echo "$transformCode"|sed -E 's/"/\\"/g')"
cat<<EOF > "${xsltFile}"
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
${xsltCodeParams[@]}
${transformCode}
</xsl:stylesheet>
EOF
local cmd="xsltproc --path . ${xsltCmdLineParams[@]} \"${xsltFile}\" \"${sourceXML}\""
#_log "Executing $cmd"
#xsltproc --path "." ${xsltCmdLineParams[@]} "${xsltFile}" "${sourceXML}" > "${newXML}"
_logf "COMMAND: '$cmd'"
__out_result="$(eval "$cmd" > "${newXML}")"
rm "${xsltFile}"
}