gpt4 book ai didi

html - Xsl/Xml 问题结构生成html标签

转载 作者:数据小太阳 更新时间:2023-10-29 02:29:44 27 4
gpt4 key购买 nike

我在通过 xslt 从 xml 文件生成 html 时遇到问题。我将 tei 生成的 DTD 与漫画书的 cbml 自定义一起使用。

这是我的 xml 结构:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TEI SYSTEM "cbml.dtd">
<?xml-stylesheet type="text/xsl" href="sorgente.xsl"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Vi for Vendetta versione digitalizzata</title>
<respStmt>
<resp>codifica</resp>
<persName>Giulio Bambini</persName>
</respStmt>
<respStmt>
<resp>traduzione</resp>
<persName>Stefano Negrini</persName>
</respStmt>
<respStmt>
<resp>lettering</resp>
<persName>Maurizio Pieri</persName>
</respStmt>
</titleStmt>
<publicationStmt>
<publisher>Università di Pisa</publisher>
<pubPlace>Pisa, Italia</pubPlace>
<date>2015</date>
<availability>
<p>Licenza gratuita</p>
</availability>
</publicationStmt>
<sourceDesc>
<bibl>
<title>Vi for Vendetta</title>
<author>
<persName>Alan Oswald Moore</persName> e
<persName>David Lloyd</persName>
</author>
<publisher>DC Comics </publisher>
<pubPlace>Londra, Gran Bretagna</pubPlace>
<date>1982</date>
</bibl>
</sourceDesc>
</fileDesc>
<encodingDesc>
<projectDesc>
<p>
La seguente codifica con l'ausilio di Image Markup Tool ci permette di identificare il testo annotato sulle
immagini della Graphic Novel. All&apos; interno del nostro elaborato i dialoghi sono stati evidenziati in corsivo e
sono stati inoltre raggruppati i nomi dei personaggi, delle organizzazioni e dei luoghi evidenziati nel testo.
</p>
</projectDesc>
</encodingDesc>
</teiHeader>
<facsimile>
<surface
xml:id="img-1"
ulx="0"
uly="0"
lrx="355"
lry="678">
<graphic url="tavole/1.jpg"/>
<zone
ulx="83"
uly="223"
lrx="272"
lry="256"
xml:id="line1"/>
<zone
ulx="92"
uly="251"
lrx="256"
lry="282"
xml:id="line2"/>
<zone
ulx="21"
uly="281"
lrx="330"
lry="308"
xml:id="line3"/>
<zone
ulx="36"
uly="306"
lrx="320"
lry="332"
xml:id="line4"/>
<zone
ulx="85"
uly="535"
lrx="249"
lry="556"
xml:id="line5"/>
<zone
ulx="97"
uly="556"
lrx="241"
lry="576"
xml:id="line6"/>
<zone
ulx="58"
uly="577"
lrx="281"
lry="595"
xml:id="line7"/>
<zone
ulx="68"
uly="595"
lrx="271"
lry="613"
xml:id="line8"/>
</surface>
</facsimile>
<facsimile>
<surface
xml:id="img-2"
ulx="0"
uly="0"
lrx="355"
lry="678">
<graphic url="tavole/2.jpg"/>
<zone
ulx="83"
uly="223"
lrx="272"
lry="256"
xml:id="line9"/>
<zone
ulx="92"
uly="251"
lrx="256"
lry="282"
xml:id="line10"/>
<zone
ulx="21"
uly="281"
lrx="330"
lry="308"
xml:id="line11"/>
<zone
ulx="36"
uly="306"
lrx="320"
lry="332"
xml:id="line12"/>
<zone
ulx="85"
uly="535"
lrx="249"
lry="556"
xml:id="line13"/>
<zone
ulx="97"
uly="556"
lrx="241"
lry="576"
xml:id="line14"/>
<zone
ulx="58"
uly="577"
lrx="281"
lry="595"
xml:id="line15"/>
<zone
ulx="68"
uly="595"
lrx="271"
lry="613"
xml:id="line16"/>
</surface>
</facsimile>

<text>

<body>

<div type="panelGrp" facs="img-1" xml:id="myElement-1">
<panel n="1" characters="#EmittenteRadioDelFato">
<balloon facs="line1" who="#EmittenteRadioDelFato" type="speech"><p>Buonasera Londra. Sono le nove, e questa è la<emph rendition="#b">voce del fato</emph> che trasmette sui 275 e 285
in onde medie... è il 5 novembre 1997.</p>
</balloon>
</panel>
<panel n="2" characters="#EmittenteRadioDelFato">
<balloon facs="#line2" type="speech" who="#EmittenteRadioDelFato"><p>Il tempo si manterrà bella fino alle 24:07, quando comincerà un <emph rendition="#b">acquazzone</emph> che durarà fino alle 01:30.</p>
</balloon>
</panel>
<panel n="3" characters="#EmittenteRadioDelFato">
<balloon facs="#line3" type="speech" who="#EmittenteRadioDelFato"><p>Per tutta la notte la temperatura resterà tra i 13 e i 14 gradi centigradi.</p>
</balloon>
</panel>
<panel n="4" characters="#EmittenteRadioDelFato">
<balloon facs="#line4" type="speech" who="#EmittenteRadioDelFato"><p>Si avverte la popolazione di Londra che da oggi le zone di Streatham e Brixton sono in <emph rendition="#b">quarantena</emph>.Si consiglia di evitare queste zone per motivi igienici e di sicurezza.</p>
</balloon>
</panel>
<panel n="5" characters="#EmittenteRadioDelFato">
<balloon facs="#line5" type="speech" who="#EmittenteRadioDelFato"><p>I dati di produttività dell'hereforshire lasciano sperare che nel febbraio del 1998 si possa porre fine al<emph rendition="#b">razionamento</emph> della carne.</p>
</balloon>
</panel>
<panel n="6" characters="#EmittenteRadioDelFato">
<balloon facs="#line6" type="speech" who="#EmittenteRadioDelFato"><p>Analoghe speranze anche per le <emph rendition="#b">uova</emph> e le <emph rendition="#b">patate</emph> grazie al'aumento della produzione.</p>
</balloon>
</panel>
<panel n="7" characters="#EmittenteRadioDelFato">
<balloon facs="#line7" type="speech" who="#EmittenteRadioDelFato"><p>Di primo mattino la polizia ha fatto irruzione in diciassette case della zona di Birmingham sgominando una pericolosa <emph rendition="#b">rete terroristica</emph>.</p>
</balloon>
<balloon facs="#line8" type="speech" who="#EmittenteRadioDelFato"><p>Venti persone, tra cui otto donne, sono attualmente detenute in attesa di giudizio.</p>
</balloon>
</panel>
<fw type="pageNum" place="lower-left">1</fw>
</div>


<div type="panelGrp" facs="img-2" xml:id="myElement-1">
<panel n="1" characters="#EmittenteRadioDelFato">
<balloon facs="line9" who="#EmittenteRadioDelFato" type="speech"><p>Buonasera Londra. Sono le nove, e questa è la<emph rendition="#b">voce del fato</emph> che trasmette sui 275 e 285
in onde medie... è il 5 novembre 1997.</p>
</balloon>
</panel>
<panel n="2" characters="#EmittenteRadioDelFato">
<balloon facs="#line10" type="speech" who="#EmittenteRadioDelFato"><p>Il tempo si manterrà bella fino alle 24:07, quando comincerà un <emph rendition="#b">acquazzone</emph> che durarà fino alle 01:30.</p>
</balloon>
</panel>
<panel n="3" characters="#EmittenteRadioDelFato">
<balloon facs="#line11" type="speech" who="#EmittenteRadioDelFato"><p>Per tutta la notte la temperatura resterà tra i 13 e i 14 gradi centigradi.</p>
</balloon>
</panel>
<panel n="4" characters="#EmittenteRadioDelFato">
<balloon facs="#line12" type="speech" who="#EmittenteRadioDelFato"><p>Si avverte la popolazione di Londra che da oggi le zone di Streatham e Brixton sono in <emph rendition="#b">quarantena</emph>.Si consiglia di evitare queste zone per motivi igienici e di sicurezza.</p>
</balloon>
</panel>
<panel n="5" characters="#EmittenteRadioDelFato">
<balloon facs="#line13" type="speech" who="#EmittenteRadioDelFato"><p>I dati di produttività dell'hereforshire lasciano sperare che nel febbraio del 1998 si possa porre fine al<emph rendition="#b">razionamento</emph> della carne.</p>
</balloon>
</panel>
<panel n="6" characters="#EmittenteRadioDelFato">
<balloon facs="#line14" type="speech" who="#EmittenteRadioDelFato"><p>Analoghe speranze anche per le <emph rendition="#b">uova</emph> e le <emph rendition="#b">patate</emph> grazie al'aumento della produzione.</p>
</balloon>
</panel>
<panel n="7" characters="#EmittenteRadioDelFato">
<balloon facs="#line15" type="speech" who="#EmittenteRadioDelFato"><p>Di primo mattino la polizia ha fatto irruzione in diciassette case della zona di Birmingham sgominando una pericolosa <emph rendition="#b">rete terroristica</emph>.</p>
</balloon>
<balloon facs="#line16" type="speech" who="#EmittenteRadioDelFato"><p>Venti persone, tra cui otto donne, sono attualmente detenute in attesa di giudizio.</p>
</balloon>
</panel>
<fw type="pageNum" place="lower-left">1</fw>
</div>



</body>
</text>
</TEI>

这是我生成 html 的 xsl 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:cbml="http://www.cbml.org/ns/1.0">
<xsl:output method="html" version="4.0" indent="no"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text>
<html>
<head>
<title>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:title"/>
</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link type="text/css" rel="stylesheet" href="stile.css" />
</head>

<body>
<div>
<xsl:attribute name="class">inner-container</xsl:attribute>
<div>
<xsl:attribute name="id">corpo</xsl:attribute>
<xsl:apply-templates></xsl:apply-templates>

</div></div>
</body>
</html>

</xsl:template>

<xsl:template match="tei:teiHeader">

<div>
<xsl:attribute name="id">header</xsl:attribute>
<h1>
<xsl:attribute name="id">titolo</xsl:attribute>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:title"/>
</h1>
<h3>
<xsl:attribute name="id">resp-name</xsl:attribute>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:respStmt/tei:resp"/>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:respStmt/tei:name"/>
</h3>
</div>
<xsl:element name="div">
<xsl:attribute name="id">contenitore-tei-header</xsl:attribute>
<xsl:element name="div">
<xsl:attribute name="id">informazioni-codifica</xsl:attribute>
<h3 class="titolo-liste">Informazioni sulla codifica</h3>
<h5>
Titolo:
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:title"/>
</h5>
<h5>
Codifica curata da:
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:respStmt/tei:persName"/>
</h5>
<h5>
Publisher:
<xsl:value-of select="tei:fileDesc/tei:publicationStmt/tei:publisher"/>
</h5>
<h5>
Città:
<xsl:value-of select="tei:fileDesc/tei:publicationStmt/tei:pubPlace"/>
</h5>
<h5>
Data:
<xsl:value-of select="tei:fileDesc/tei:publicationStmt/tei:date"/>
</h5>
</xsl:element>
<xsl:element name="div">
<xsl:attribute name="id">informazioni-fumetto</xsl:attribute>
<h3 class="titolo-liste">Informazioni sul fumetto</h3>
<h5>
Titolo originale:
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:title"/>
</h5>
<h5>
Autori:
<a href="item.php?id={ItemId}">
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:author/tei:persName"/>
</a>
</h5>
<h5>
Casa editrice:
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:publisher"/>
</h5>
<h5>
Città:
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:pubPlace"/>
</h5>
<h5>
Data pubblicazione:
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:date"/>
</h5>
</xsl:element>
<xsl:element name="div">
<xsl:attribute name="id">introduzione</xsl:attribute>
<h3 class="titolo-liste">Introduzione</h3>
<xsl:value-of select="tei:encodingDesc/tei:projectDesc"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="tei:facsimile/tei:surface">
<xsl:element name="div">
<xsl:attribute name="id">contenitore-immagine</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="class">dimensioni</xsl:attribute>
<xsl:attribute name="src">
<xsl:value-of select="tei:graphic/@url" />
</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>

<xsl:template match="tei:text">

<xsl:apply-templates></xsl:apply-templates>
</xsl:template>




<xsl:template match="tei:body/tei:div[@type='panelGrp']">
<xsl:element name="div">
<xsl:attribute name="id">contenitore-testo-annotato</xsl:attribute>
<xsl:element name="ul">
<xsl:attribute name="class">ul-testo-annotato</xsl:attribute>
<xsl:for-each select="cbml:panel">
<xsl:element name="li">
<xsl:attribute name="class">li-testo-annotato</xsl:attribute>
<xsl:element name="p">
<xsl:attribute name="class">p-testo-annotato</xsl:attribute>
<xsl:value-of select="cbml:balloon"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:template>



</xsl:stylesheet>

这是生成的 html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:cbml="http://www.cbml.org/ns/1.0"><head><title></title><meta http-equiv="content-type" content="text/html; charset=utf-8" /><link type="text/css" rel="stylesheet" href="stile.css" /></head><body><div class="inner-container"><div id="corpo">
<div id="header"><h1 id="titolo">Vi for Vendetta versione digitalizzata</h1><h3 id="resp-name">codifica</h3></div><div id="contenitore-tei-header"><div id="informazioni-codifica"><h3 class="titolo-liste">Informazioni sulla codifica</h3><h5>
Titolo:
Vi for Vendetta versione digitalizzata</h5><h5>
Codifica curata da:
Giulio Bambini</h5><h5>
Publisher:
Università di Pisa</h5><h5>
Città:
Pisa, Italia</h5><h5>
Data:
2015</h5></div><div id="informazioni-fumetto"><h3 class="titolo-liste">Informazioni sul fumetto</h3><h5>
Titolo originale:
Vi for Vendetta</h5><h5>
Autori:
<a href="item.php?id=">Alan Oswald Moore</a></h5><h5>
Casa editrice:
DC Comics </h5><h5>
Città:
Londra, Gran Bretagna</h5><h5>
Data pubblicazione:
1982</h5></div><div id="introduzione"><h3 class="titolo-liste">Introduzione</h3>

La seguente codifica con l'ausilio di Image Markup Tool ci permette di identificare il testo annotato sulle
immagini della Graphic Novel. All' interno del nostro elaborato i dialoghi sono stati evidenziati in corsivo e
sono stati inoltre raggruppati i nomi dei personaggi, delle organizzazioni e dei luoghi evidenziati nel testo.

</div></div>

<div id="contenitore-immagine"><img class="dimensioni" src="tavole/1.jpg" /></div>


<div id="contenitore-immagine"><img class="dimensioni" src="tavole/2.jpg" /></div>






<div id="contenitore-testo-annotato"><ul class="ul-testo-annotato"></ul></div>


<div id="contenitore-testo-annotato"><ul class="ul-testo-annotato"></ul></div>





</div></div></body></html>

我的问题是我想生成这个带有 altenated html 标签的 html 结构(类似的东西..):

<div id="contenitore-immagine">
<div id="contenitore-testo-annotato">
<div id="contenitore-immagine">
<div id="contenitore-testo-annotato">

但是对于我当前的 xsl,它带有这个错误的结构(它将所有元素匹配在一起而没有交替):

<div id="contenitore-immagine">
<div id="contenitore-immagine">
<div id="contenitore-testo-annotato">
<div id="contenitore-testo-annotato">

我该怎么做才能生成交替的 html 标签?如何选择连接到相关图像的文本段?

最佳答案

解决方法如下:

tei:text定义一个空模板,这样处理就不会自动流入其中:

<xsl:template match="tei:text" />

为源文档中的所有面板创建一个变量,以便您可以简洁高效地访问它们:

<xsl:variable name="pannelli" select="/*/tei:text/tei:body/tei:div[@type='panelGrp']" />

处理传真表面时,确定该表面在文档中的序号,并使用它来将模板应用到相关面板:

<xsl:template match="tei:facsimile/tei:surface">
<xsl:variable name="pos">
<xsl:number count="tei:facsimile/tei:surface" level="any"/>
</xsl:variable>

<div id="contenitore-immagine">
<img class="dimensioni" src="{tei:graphic/@url}"/>
</div>

<xsl:apply-templates select="$pannelli[number($pos)]" />
</xsl:template>

(与原题无关)对panelGrp模板做一些改进和修正:

<xsl:template match="tei:body/tei:div[@type='panelGrp']">
<div id="contenitore-testo-annotato">
<ul class="ul-testo-annotato">
<xsl:apply-templates select="tei:panel" />
</ul>
</div>
</xsl:template>

<xsl:template match="tei:div[@type='panelGrp']/tei:panel">
<li class="li-testo-annotato">
<p class="p-testo-annotato">
<xsl:value-of select="tei:balloon"/>
</p>
</li>
</xsl:template>

完整解决方案:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:cbml="http://www.cbml.org/ns/1.0"
exclude-result-prefixes="tei cbml">
<xsl:output method="html" version="4.0" indent="no"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html></xsl:text>
<html>
<head>
<title>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:title"/>
</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link type="text/css" rel="stylesheet" href="stile.css" />
</head>

<body>
<div class="inner-container">
<div id="corpo">
<xsl:apply-templates/>
</div>
</div>
</body>
</html>

</xsl:template>

<xsl:template match="tei:teiHeader">

<div id="header">
<h1 id="titolo">
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:title"/>
</h1>
<h3 id="resp-name">
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:respStmt/tei:resp"/>
<xsl:value-of select="tei:fileDesc/tei:titleStmt/tei:respStmt/tei:name"/>
</h3>
</div>
<div id="contenitore-tei-header">
<div id="informazioni-codifica">
<h3 class="titolo-liste">Informazioni sulla codifica</h3>
<h5>
<xsl:value-of select="concat('Titolo: ', tei:fileDesc/tei:titleStmt/tei:title)"/>
</h5>
<h5>
<xsl:value-of select="concat('Codifica curata da: ', tei:fileDesc/tei:titleStmt/tei:respStmt/tei:persName)"/>
</h5>
<h5>
<xsl:value-of select="concat('Publisher:', tei:fileDesc/tei:publicationStmt/tei:publisher)"/>
</h5>
<h5>
<xsl:value-of select="concat('Città:', tei:fileDesc/tei:publicationStmt/tei:pubPlace)"/>
</h5>
<h5>
<xsl:value-of select="concat('Data: ', tei:fileDesc/tei:publicationStmt/tei:date)"/>
</h5>
</div>
<div id="informazioni-fumetto">
<h3 class="titolo-liste">Informazioni sul fumetto</h3>
<h5>
<xsl:value-of select="concat('Titolo originale: ', tei:fileDesc/tei:sourceDesc/tei:bibl/tei:title)"/>
</h5>
<h5>
<xsl:text>Autori: </xsl:text>
<a href="item.php?id={ItemId}">
<xsl:value-of select="tei:fileDesc/tei:sourceDesc/tei:bibl/tei:author/tei:persName"/>
</a>
</h5>
<h5>
<xsl:value-of select="concat('Casa editrice: ', tei:fileDesc/tei:sourceDesc/tei:bibl/tei:publisher)"/>
</h5>
<h5>
<xsl:value-of select="concat('Città: ', tei:fileDesc/tei:sourceDesc/tei:bibl/tei:pubPlace)"/>
</h5>
<h5>
<xsl:value-of select="concat('Data pubblicazione: ', tei:fileDesc/tei:sourceDesc/tei:bibl/tei:date)"/>
</h5>
</div>
<div id="introduzione">
<h3 class="titolo-liste">Introduzione</h3>
<xsl:value-of select="tei:encodingDesc/tei:projectDesc"/>
</div>
</div>
</xsl:template>

<xsl:template match="tei:text" />

<xsl:variable name="pannelli" select="/*/tei:text/tei:body/tei:div[@type='panelGrp']" />

<xsl:template match="tei:facsimile/tei:surface">
<xsl:variable name="pos">
<xsl:number count="tei:facsimile/tei:surface" level="any"/>
</xsl:variable>

<div id="contenitore-immagine">
<img class="dimensioni" src="{tei:graphic/@url}"/>
</div>

<xsl:apply-templates select="$pannelli[number($pos)]" />
</xsl:template>

<xsl:template match="tei:body/tei:div[@type='panelGrp']">
<div id="contenitore-testo-annotato">
<ul class="ul-testo-annotato">
<xsl:apply-templates select="tei:panel" />
</ul>
</div>
</xsl:template>

<xsl:template match="tei:div[@type='panelGrp']/tei:panel">
<li class="li-testo-annotato">
<p class="p-testo-annotato">
<xsl:value-of select="tei:balloon"/>
</p>
</li>
</xsl:template>

</xsl:stylesheet>

关于html - Xsl/Xml 问题结构生成html标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com