0

我编写了一个 xquery 3.0 函数,该函数将属性的内容存储在文件中。问题是文件中只有一行被格式化;换句话说,如果我获得属性值的标签是例如

...
<tag attr=" example line 1
            example line 2
"/>...

在我找到的文件中

example line 1 example line 2

而我想要的输出是

example line 1`
example line 2

你有什么建议?我正在使用存在数据库。我提前谢谢你。

4

2 回答 2

1

XQuery 在处理元素节点构造函数中的属性时模仿 XML 解析器的行为:它应用 XML 规范中定义的属性值规范化,这会丢失换行符。您可以通过将换行符写为 来强制将换行符写入属性值&#xa;,但通常在换行符很重要的地方拥有属性并不是一个好的 XML 设计。(XSLT 是该规则导致问题的一个示例,因为 XSLT 将 XPath 表达式放在属性中,并且这些表达式通常是多行的)。

于 2015-11-22T10:11:04.257 回答
0

当然!我的existdb版本是2.2。

xquery version "3.0";
declare boundary-space preserve;

declare namespace exist = "http://exist.sourceforge.net/NS/exist";
declare namespace request="http://exist-db.org/xquery/request";
declare namespace xmldb="http://exist-db.org/xquery/xmldb";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "text";
declare option output:indent "yes";
import module namespace file="http://exist-db.org/xquery/file";




let $log-in := xmldb:login("/db", "admin", "admin")


for $k in (35,36,37)

let $AppletName := fn:doc(fn:concat('/db/project/AppletA_',$k,'.xml'))//APPLET/@NAME/string()
let $collection := fn:concat('xmldb:exist:/db/project/Scripts_',$k)

let $node :=(<APPLET_SCRIPTS>{
                    for $i in fn:doc(fn:concat('/db/project/AppletA_',$k,'.xml'))//APPLET_SERVER_SCRIPT
                        let $MethodName := $i/@NAME
                        let $MethodScript := string($i/@SCRIPT)

                        let $file-name :=  fn:concat($MethodName,'.js')
                        let $store :=  xmldb:store($collection,$file-name, $MethodScript) 

                            return <div>{$MethodScript}</div>
            }</APPLET_SCRIPTS>)

return $node   

xml的一个片段是:

截图xml片段

创建的文件内容是这一行字符串:

函数 Prova() { 尝试 { var sVal = TheApplication().InvokeMethod("LookupValue","FS_ACTIVITY_CLASS","CIM_FAC18"); var recordFound = searchRecord(sVal); if(!recordFound) { this.InvokeMethod("NewRecordCustom"); this.BusComp().SetFieldValue("Class",sVal); this.BusComp().WriteRecord(); } } 捕捉(e){ 抛出(e); } 最后 { sVal = null; } }

于 2015-11-21T12:47:07.703 回答