declare function local:stripNS($name as xs:string?)
as xs:string?
{
if(contains($name, ':'))
then substring($name, functx:index-of-string($name, ':') + 1)
else $name
};
for $x in doc("test.xml")//*[@ref]
let $tmp:=local:stripNS($x/@ref)
return replace value of node $x/@ref with $tmp
Ich möchte aus dem Wert des Attributs ref
und type
Namespace entfernen. SO <test ref='haha:123' type='hehe:456'/>
sollte <test ref='123' type='456'/>
werden. Ich weiß nicht, die richtige Syntax, unten ist die ideale .xqy Datei Ich möchte:BaseX: korrekte Syntax platzieren mehrere ‚ersetzen‘
declare function local:stripNS($name as xs:string?)
as xs:string?
{
if(contains($name, ':'))
then substring($name, functx:index-of-string($name, ':') + 1)
else $name
};
for $x in doc('test.xml')//*[@ref]
let $tmp:=local:stripNS($x/@ref)
return replace value of node $x/@ref with $tmp,
for $x in doc('test.xml')//*[@type]
let $tmp:=local:stripNS($x/@type)
return replace value of node $x/@ref with $tmp
Aber natürlich enthält es Syntaxfehler:
[XUDY0017] Node can only be replaced once: attribute ref {"123"}.
$ basex -u test.xqy
Verwenden Sie den Befehl oben Prüfung. Die Ausgabe würde zurück auf geschrieben werden.
Bitte geben Sie immer eine Beispieleingabe an. Erleichtert das Beantworten von Fragen und gibt Antworten, die besser zu Ihrem tatsächlichen Problem passen. –
@JensErat Sie haben es schon. Kopieren Sie einfach die ' ' in eine lokale Datei mit dem Namen 'test.xml' –
. Eine andere Sache noch wichtiger, die Sie verpasst haben: ** immer ** die Fehlermeldung enthalten, wenn Sie eine bekommen. Wenn Sie die Fehlermeldung gepostet hätten, hätten vermutlich die meisten XQuery-Leute das Problem sofort bemerkt, ohne den Code zu kopieren. –