с помощью блокнота ++ У меня есть путь к элементу, содержащему cdata, который выглядит следующим образом:
/jasperReport[1]/columnHeader[1]/band[1]/staticText[1]/text[1]
источник выглядит примерно так:
<jasperReport>
<columnHeader>
<band height="22" >
<staticText>
<reportElement x="0" y="0" width="48" height="20" uuid="one"/>
<box leftPadding="1">
<pen lineWidth="0.5"/>
<topPen lineWidth="0.5"/>
<leftPen lineWidth="0.5"/>
<bottomPen lineWidth="0.5"/>
<rightPen lineWidth="0.5"/>
</box>
<textElement>
<font size="8" />
</textElement>
<text><![CDATA[MYNUM]]></text>
</staticText>
Я пытаюсь использовать XQUERY для возврата значений, похожих на «MYNUM», от второй до последней строки во фрагменте xml. В этом случае он скажет мне, что в этой части заголовка есть текст «MYNUM». Я намереваюсь вернуть более полную информацию для многих похожих отчетов, используя XQUERY с BaseX на моей ма c.
Так что я могу запустить xquery для набора файлов отчетов, которые будут выводить что-то вроде:
/ filenameofreport.data
<Header>
<reportElement>x=0 y=0 value=MYNUM</reportElement>
<reportElement>x=10 y=0 value=THATNUM</reportElement>
</HEADER>
хорошо, я знаю этот запрос ввода:
declare namespace abc="http://jasperreports.sourceforge.net/jasperreports";
for $document in collection("temp")
where document-uri($document) = "/temp/Daily_P1NoAssign_.data"
return
for $thefield in $document//abc:jasperReport[1]/abc:columnHeader[1]/abc:band[1]/abc:staticText[1]/abc:textElement[1]/abc:font
let $fontsize := string-join(("<font>",$thefield/@size,"</font>"))
let $docgroup := xs:string((document-uri($document)))
group by $docgroup
order by $docgroup
return ( element {"jasperReport"} { $docgroup } , $fontsize)
произвел этот вывод:
<jasperReport>/temp/Daily_P1NoAssign_.data</jasperReport>
<font>8</font>
Итак ... этот ввод нацелен у элемента textElement должен быть правильный элемент, но я не знаю, как вывести данные
xquery:
declare namespace abc="http://jasperreports.sourceforge.net/jasperreports";
for $document in collection("temp")
where document-uri($document) = "/temp/Daily_P1NoAssign_.data"
return
for $thefield in $document//abc:jasperReport[1]/abc:columnHeader[1]/abc:band[1]/abc:staticText[1]/abc:text[1]
let $textinfo := string-join(("<text>",$thefield/*,"</text>"))
let $docgroup := xs:string((document-uri($document)))
group by $docgroup
order by $docgroup
return ( element {"jasperReport"} { $docgroup } , $textinfo)
возвращает:
<jasperReport>/temp/Daily_P1NoAssign_.data</jasperReport>
<text></text>
update : О, я почти все понял, я думаю - сначала вот решение, но я хотел бы вывести данные немного по-другому ...
declare namespace abc="http://jasperreports.sourceforge.net/jasperreports";
for $document in collection("temp")
where document-uri($document) = "/temp/Daily_P1NoAssign_.data"
return
for $thefield in $document//abc:jasperReport[1]/abc:columnHeader[1]/abc:band[1]/abc:staticText/abc:text[1]
let $textinfo3 := $thefield/text()
let $docgroup := xs:string((document-uri($document)))
group by $docgroup
order by $docgroup
return ( element {"jasperReport"} { $docgroup } ,$textinfo3)
возвращает это с WONUM WORKTPE et c в отдельных строках:
<jasperReport>/temp/Daily_P1NoAssign_.data</jasperReport>
WONUM
WORKTYPE
LOCATION
MODELNUM
SERIALNUM
REPORTDATE
STATUSDATE
STATUS
OWNER
OWNERGROUP
WARRANTYEXPDATE
INWARRANTY
Есть ли способ вернуть это с помощью WONUM WORKTYPE et c в одной строке ??
<jasperReport>/temp/Daily_P1NoAssign_.data</jasperReport>
WONUM WORKTYPE LOCATION MODELNUM SERIALNUM REPORTDATE STATUSDATE STATUS OWNER OWNERGROUP WARRANTYEXPDATE INWARRANTY