मैं वर्तमान में एक्सएमएल और एक्सएसएलटी के साथ कुछ पर काम कर रहा हूं। यह एक बड़ी परियोजना का हिस्सा है और इतिहास में मेरी पीएचडी का हिस्सा है, इसलिए किसी भी मदद का बहुत स्वागत है!

मैं एक पाठ्यपुस्तक का डिजिटल संस्करण बना रहा हूं और इस पुस्तक में स्वाभाविक रूप से लगभग हमेशा एक दूसरे के बगल के पृष्ठ होते हैं, जिन्हें मैं एक दूसरे के बगल में प्रदर्शित करना चाहता हूं। (मैं उसके लिए बूटस्ट्रैप या सिमेंटिकयूआई का उपयोग करूंगा)

तो मैं सचमुच सब कुछ "हथियाना" चाहता हूं जो निम्नानुसार है <pb/> तत्व जब तक मैं अगले <pb/> तत्व तक नहीं पहुंच जाता

इसलिए मैंने एक <xsl:template/> बनाया जो प्रत्येक ती-तत्व <pb/> को एक निश्चित वर्ग के साथ एक div में बदल देता है। मेरी समस्या यह है कि <div> अगले <pb> तत्व तक होना चाहिए।

<xsl:template match="tei:pb">
        <xsl:element name="div">
            <xsl:attribute name="class"> 
                <xsl:text>test;</xsl:text>
            </xsl:attribute>
            <xsl:attribute name="style">
                <xsl:text>text-align:right;</xsl:text>
            </xsl:attribute>
            <xsl:text>[F.</xsl:text>
            <xsl:value-of select="@n"/>
            <xsl:text>]</xsl:text>
        <xsl:element name="hr"/>
    </xsl:element>

वांछित लेआउट निम्नलिखित एचटीएमएल (सीमाओं आदि के बिना) की तरह होगा।

<div class="content">
<div class="panel-body">
  <div class="test" style="width: 49%;border:solid 1px red; float:left">
    <div class="page number" style="text-align:right;"> F.29v. <hr>
    </div>
      <div class="text" style="">
        Example text
      </div>
  </div>
<div class="test" style="width:49%;border:solid 1px green;float:left;">
    <div class="page number"style="text-align:right"> F.30r <hr> </div>
      <div class="text" style="">
        Here I want the text to be displayed</div>
</div>

मैं वास्तव में अपने कोड को पहले से वह करने की उम्मीद नहीं करता जो मैं करना चाहता हूं। कोड, जैसा कि मुझे लगता है, इस तरह लिखे जाने पर वास्तव में क्या करना चाहिए, लेकिन मैं चाहता हूं कि इसका परिणाम मेरे उदाहरण आउटपुट में हो, मुझे क्या बदलना है? (यह प्रत्येक XML-फ़ाइल में हमेशा २ <pb> तत्व होते हैं, एक या तीन नहीं, हमेशा दो।

तो छद्म कोड में:

<xsl:template match="tei:pb and all the following elements til the next tei:pb> ```

and then transform it according to my rules

my full stylesheet: 
https://pastebin.com/99CS6n6c
1
user9813195 25 अक्टूबर 2019, 17:14

1 उत्तर

सबसे बढ़िया उत्तर

मेरा सुझाव नीचे उबाल जाएगा

  <xsl:template match="body">
      <div class="panel-body">
          <xsl:for-each-group select="*" group-starting-with="pb">
                <div class="test" style="width: 49%;border:solid 1px red; float:left">
                    <xsl:apply-templates select="current-group()"/>
                </div>
          </xsl:for-each-group>
       </div>
  </xsl:template>

  <xsl:template match="pb">
      <div class="page number" style="text-align:right;">
          <xsl:text>[F.</xsl:text>
          <xsl:value-of select="@n"/>
          <xsl:text>]</xsl:text>
          <hr/>
      </div>
  </xsl:template>

  <xsl:template match="p">
      <p>
          <xsl:apply-templates/>
      </p>
  </xsl:template>

"पूर्ण उदाहरण":

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xpath-default-namespace="http://www.tei-c.org/ns/1.0"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:output method="html" indent="yes" html-version="5"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>.NET XSLT Fiddle Example</title>
      </head>
      <body>
        <xsl:apply-templates select="//body"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="body">
      <div class="panel-body">
          <xsl:for-each-group select="*" group-starting-with="pb">
                <div class="test" style="width: 49%;border:solid 1px red; float:left">
                    <xsl:apply-templates select="current-group()"/>
                </div>
          </xsl:for-each-group>
       </div>
  </xsl:template>

  <xsl:template match="pb">
      <div class="page number" style="text-align:right;">
          <xsl:text>[F.</xsl:text>
          <xsl:value-of select="@n"/>
          <xsl:text>]</xsl:text>
          <hr/>
      </div>
  </xsl:template>

  <xsl:template match="p">
      <p>
          <xsl:apply-templates/>
      </p>
  </xsl:template>

</xsl:stylesheet>

https://xsltfiddle.liberty-development.net/ncntCsc

XSLT 2 प्रोसेसर के लिए आपको <xsl:mode on-no-match="shallow-copy"/> को पहचान टेम्पलेट के रूप में लिखना होगा

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

उस कोड के साथ टुकड़ा

    <body>
        <pb></pb>
        <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. </p>
        <pb></pb>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. </p>
    </body>

इनपुट नमूने का HTML खंड में बदल दिया गया है

  <div class="panel-body">
     <div class="test" style="width: 49%;border:solid 1px red; float:left">
        <div class="page number" style="text-align:right;">[F.]
           <hr>
        </div>
        <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
           invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
           accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
           sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing
           elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
           sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
           kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 
        </p>
     </div>
     <div class="test" style="width: 49%;border:solid 1px red; float:left">
        <div class="page number" style="text-align:right;">[F.]
           <hr>
        </div>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
           invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
           accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
           sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing
           elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
           sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
           kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 
        </p>
     </div>
  </div>
0
Martin Honnen 25 अक्टूबर 2019, 19:04