我正在尝试在xml中呈现标题页,我正在通过eXist-db应用程序进行。这是相关的xml:
<front>
<titlePage>
<titlePart>
<lb>THE</lb>
<lb>ADVENTURES</lb>
<lb>OF</lb>
<lb>Roderick Random.</lb>
<lb><epigraph xml:lang="la">
<cit>
<quote xml:lang="la" link="http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.02.0062" title="Satires 2.5.8: 'But birth and virtue, unless [attended] with substance, is viler than seaweed.'">
<l>Et genus & virtus, nisi cum re, vilior alga est.</l>
</quote>
<bibl>
<author ref="HOR" link="http://en.wikipedia.org/wiki/Horace" title="Quintus Horatius Flaccus, Roman lyric poet of the 1st century BCE">HOR.</author>
</bibl>
</cit>
</epigraph>
</lb>
<lb>IN TWO VOLUMES.</lb>
<lb>VOL. I.</lb>
<lb>THE TENTH EDITION.</lb>
<hr/>
<lb><name type="place">LONDON:</name></lb>
<lb>Printed for W. STRACHAN, J. RIVINGTON, R. BALDWIN, HAWES CLARKE, AND COLLINS, W. JOHNSTON, T. CASLON, B. LAW, J. JOHNSON AND Co, W. AND J. RICHARDSON, T. BECKETT, and P.. DeHONDT,</lb>
<lb><date title="1775">MDCCLXXV.</date></lb>
</titlePart>
</titlePage>
<pb n="titlepage" facs="smollett.png"/>
</front>
&#13;
此时以图形方式,我想要的是在单独的一行上的每个<lb>
。我还希望<epigraph>
出现在标题页的现有逻辑中的任何位置 - 也就是说,与现有<lb>
内联。此屏幕截图应有助于明确说明:screenshot of flawed rendered page
以下是带有xsl转换的相关.xql位。如果你想看到所有的.xql,你可以在这里看到(再次,为整个真正的不优雅道歉):https://gist.github.com/tonyahowe/c55167e13ae22139f94080289cb88f47:
declare function tei2:tei2html($nodes as node()*) {
for $node in $nodes
return
typeswitch ($node)
case text() return
$node
case element(tei:TEI) return
tei2:tei2html($node/*)
case element(tei:teiHeader) return
tei2:header($node)
case element(tei:frontTitle) return
<h3>{ tei2:tei2html($node/node()) }</h3>
case element(tei:lb) return
<br>{ tei2:tei2html($node/node()) }</br>
case element(tei:l) return
<l>{ tei2:tei2html($node/node()) }</l>
case element(tei:i) return
<i>{ tei2:tei2html($node/node()) }</i>
case element(tei:pb) return
<span style="color:lightgray">[end page {tei2:tei2html($node/@n)}]{ tei2:tei2html($node/node()) }</span>
case element(tei:footer) return
<hr>{ tei2:tei2html($node/node()) }</hr>
case element(tei:front) return
tei2:front($node)
case element(tei:rs) return
tei2:link($node)
case element(tei:quote) return
tei2:link($node)
case element(tei:note) return
tei2:note($node)
case element(tei:footnote) return
tei2:footnote($node)
case element(tei:p) return
<p xmlns="http://www.w3.org/1999/xhtml" id="{tei2:get-id($node)}">{ tei2:tei2html($node/node()) }</p> (: THIS IS WHERE THE ANCHORS ARE INSERTED! :)
case element(exist:match) return
<mark xmlns="http://www.w3.org/1999/xhtml">{ $node/node() }</mark>
case element() return
tei2:tei2html($node/node())
default return
$node/string() (: what would this catch? comment node in the xml? :)
};
declare function tei2:link($node as element()) {
if ($node/@link ne '' and $node/@link castable as xs:anyURI) then
<a href="{$node/@link}" data-toggle="tooltip" title="{$node/@title}">{
tei2:tei2html( $node/node() )
}</a>
else
tei2:tei2html( $node/node() )
};
declare function tei2:note($node as element()) {
<span style="color:black" href="{$node/@link}" data-toggle="tooltip" title="{$node/@title}"> {
tei2:tei2html ( $node/node() )
}</span>
};
-------------------------- cut
declare function tei2:front($front as element (tei:front)) {
let $titlePage := $front//tei:titlePage
let $titlePart := $front//tei:titlePart
let $epigraph := $front//tei:epigraph
let $note := $front//tei:note
let $argument := $front//tei:argument
let $quote := $front//tei:quote
let $bibl := $front//tei:bibl
let $author := $front//tei:author
return
<div xmlns="http://www.w3.org/1999/xhtml" class="main-text-frontmatter">
{
for $lb in $titlePage
return
$titlePage//tei:lb
}
{
console:log($epigraph),
for $cit in $epigraph
return
<blockquote>
{
<a href="{$quote/@link}" data-toggle="tooltip" title="{$quote/@title}">{$quote/tei:l}</a>
}<br/>
--
{
<a href="{$author/@link}" data-toggle="tooltip" title="{$author/@title}">{$author/text()}</a>
}
</blockquote>
}
</div>
};
&#13;
答案 0 :(得分:2)
通常在TEI中,lb
元素是一个空的里程碑元素,因此它只显示为:<lb/>
。 (参见关于lb
元素的TEI指南。它标记了换行的位置,而不是围绕一行的整个内容,就像你在TEI中使用它一样。
以同样的方式,HTML的<br/>
元素是一个空元素。因此,此元素的类型切换可以变为case element(tei:lb) return <br/>
。
将您的TEI标记调整为此<lb/>
表单,并将您的typeswitch调整为输出HTML <br/>
元素,可以帮助您找到解决方案的路径。
答案 1 :(得分:1)
我不知道您将dataHit <- data[data[["Hit"]] == 1, ]
dataHit[["Type"]] <- factor(data[["Type"]])
dataHit[["Quarter"]] <- factor(data[["Quarter"]])
table(dataHit[["Type"]], dataHit[["Quarter"]])
元素转换为HTML的位置:
lb
这只会转出TEI XML,这将是无效的HTML。
看起来for $lb in $titlePage
return
$titlePage//tei:lb
函数会在HTML中正确呈现tei2:tei2html
,但它也会呈现您要排除的<lb>
。如果您的XML非常可预测且与您的示例类似,则可以使用谓词排除包含<epigraph>
的{{1}}:
<lb>
但这相当脆弱,并且还会排除epigraph
个包含$titlePage//tei:lb[not(tei:epigraph)]
的{{1}}与您可能要保留的任何文本节点混合的内容。在这种情况下,您可以递归处理元素以删除它们:
<lb>
<强>更新强>
如果你 DO 想要内联呈现<epigraph>
元素,那么只需使用declare function local:remove-epigraph(
$node as node()
) as node()*
{
typeswitch ($node)
case element(tei:epigraph) return ()
case element() return element { node-name($node) } {
for $n in $node/node()
return local:remove-epigraph($node)
}
default return $node
};
...
$titlePage//tei:lb/local:remove-epigraph(.)
函数来呈现它们:
epigraph