我正在尝试了解 xproc 的工作原理并将 bash 脚本转换为 xproc。
我习惯于 bash 脚本,但现在的想法是将所有内容都采用 XML 格式......
这是我的 bash 脚本:它在数组中创建一些信息,然后循环遍历其中一个数组以使用 cat 写入文件。
#!/bin/bash
Titel=("Star Wars" "Eraserhead" "Unforgiven")
Jahr=(1978 1976 1992)
Genre=("SciFi" "Horror" "Western")
Regisseur=("George Lucas" "David Lynch" "Clint Eastwood")
Film=(Titel Jahr Genre Regisseur)
Datum=()
echo "${Titel[@]}"
echo "${Jahr[@]}"
echo "${Genre[@]}"
echo "${Regisseur[@]}"
echo "${Film[@]}"
echo "${Datum[@]}"
for j in "${!Jahr[@]}"
do
Datum+=(${Jahr[j]})
cat <<EOF>> Filmsammlung.txt
${Titel[j]}
${Jahr[j]}
${Genre[j]}
${Regisseur[j]}
EOF
done
这是相应的xproc(我认为......)
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0">
<p:input port="source">
<p:document href="filmsammlung.xml"/>
</p:input>
<p:output port="result" sequence="true"/>
<p:for-each>
<!-- this should iterate over Jahr: for j in "${!Jahr[@]}"-->
<p:iteration-source select="//Jahr"/>
<p:output port="result"/>
<!-- do Datum+=(${Jahr[j]}) (I am not renaming my aray, but cheating by creating a new array called Datum...)-->
<p:rename match="/Jahr" new-name="Datum"/>
<!-- this executes cat for each iteration..-->
<p:exec command="cat" result-is-xml="true" name="exec"/>
<!-- this deals with possible errors...-->
<p:identity>
<p:input port="source">
<p:pipe port="errors" step="exec"/>
</p:input>
</p:identity>
<p:store href="fehler.xml"/>
<p:identity>
<p:input port="source">
<p:pipe port="exit-status" step="exec"/>
</p:input>
</p:identity>
<p:store href="exit_status.xml"/>
<p:identity>
<p:input port="source">
<p:pipe port="result" step="exec"/>
</p:input>
</p:identity>
<p:store href="resultat.xml"/>
</p:for-each>
</p:declare-step>
是否有意义?我是 xproc 的新手——如何测试 xproc 的功能?
Filmsammlung.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<FilmSammlung>
<Film>
<Titel>Star Wars: Episode IV - A New Hope</Titel>
<Jahr>1978</Jahr>
<Genre>SciFi</Genre>
<Regisseur>George Lucas</Regisseur>
<Produzent>George Lucas</Produzent>
<Cast>
<Hauptdarsteller>Mark Hamill</Hauptdarsteller>
<Hauptdarsteller>Harrison Ford</Hauptdarsteller>
</Cast>
<Laenge>121 min</Laenge>
<Autor>George Lucas</Autor>
</Film>
<Film>
<Titel>Eraserhead</Titel>
<Jahr>1976</Jahr>
<Genre>Horror</Genre>
<Regisseur>David Lynch</Regisseur>
<Produzent>David Lynch</Produzent>
<Cast>
<Hauptdarsteller>Jack Nance</Hauptdarsteller>
<Hauptdarsteller>Allen Joseph</Hauptdarsteller>
</Cast>
<Laenge>89 min</Laenge>
<Autor>David Lynch</Autor>
</Film>
<Film>
<Titel>Unforgiven</Titel>
<Jahr>1992</Jahr>
<Genre>Western</Genre>
<Regisseur>Clint Eastwood</Regisseur>
<Produzent>Clint Eastwood</Produzent>
<Cast>
<Hauptdarsteller>Clint Eastwood</Hauptdarsteller>
<Hauptdarsteller>Gene Hackman</Hauptdarsteller>
</Cast>
<Laenge>131 min</Laenge>
<Autor>David Webb Peoples</Autor>
</Film>
</FilmSammlung>