如何获取某个XML标签之间的所有内容

kev1807

我目前正在使用XML和XSLT进行开发。这是一个更大的项目的一部分,也是我的历史学博士学位的一部分,因此非常欢迎任何帮助!

我正在制作教科书的数字版,而这本书自然几乎总是彼此相邻,我希望彼此相邻显示。(我将为此使用bootstrap或SemanticUI)

所以我想“抓住”该<pb/>元素之后的所有内容,直到到达下一个<pb/>元素

因此,我构建了一个<xsl:template/>将每个tei元素<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>

所需的布局将类似于以下html(无边框等)。

<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>

我真的不希望我的代码能做我想做的事。我认为该代码确实按照这种方式编写时应该执行的操作,但是我希望它产生示例输出,我必须更改什么?<pb>每个XML文件中总是2个元素,而不是1个或3个,总是两个。

所以在伪代码中:

<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
马丁·洪恩

我的建议可以归结为

  <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>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从XML文件中提取它们之间的所有标签和内容?

来自分类Dev

WordPress:如何获取某个类别的所有帖子中使用的所有标签?

来自分类Dev

查找标签之间的所有内容

来自分类Dev

python - 如何使用beautifulsoup在网页中的某个文本之前获取所有<p>标签?

来自分类Dev

如何使用python获取XML中的所有标签?

来自分类Dev

从C中的XML文件获取相同多个标签之间的所有信息

来自分类Dev

无法从XML文件获取所有标签

来自分类Dev

如何包装标签的所有内容?

来自分类Dev

如何重新索引某个类型的所有内容?

来自分类Dev

如何在特定标签内的xml中获取所有嵌套标签和文本?

来自分类Dev

Jsoup:提取2个随机标签之间的所有内容

来自分类Dev

RegEx提取脚本标签之间的所有内容

来自分类Dev

如何在iOS中解析html以获取其所有内容以及标签名称?

来自分类Dev

如何删除两个XML标签之间的所有字符和行

来自分类Dev

获取带有标识符的html标签之间的内容

来自分类Dev

如何在Python中的两个html标记之间获取所有内容?

来自分类Dev

获取html标签之间的内容

来自分类Dev

如何在GitHub中获取某个版本的所有提交?

来自分类Dev

我如何获取某个类的所有可用注释的列表

来自分类Dev

BeautifulSoup-如何获取某个属性的所有值

来自分类Dev

卷曲特定的div标签,直到获取所有内容

来自分类Dev

如何在C#中的div标签之间获取内容

来自分类Dev

获取两次提交之间的所有标签的列表

来自分类Dev

HTML 解析 - 在所有标签之间获取文本

来自分类Dev

无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

来自分类Dev

如何使用XPath获取XML中的所有后代文本内容

来自分类Dev

获取相同标签的第一个标签之后的所有标签的内容-Jsoup

来自分类Dev

如何获取ul标签下的section标签的所有ID

来自分类Dev

在SQL中获取某个字符之前的所有内容

Related 相关文章

  1. 1

    如何从XML文件中提取它们之间的所有标签和内容?

  2. 2

    WordPress:如何获取某个类别的所有帖子中使用的所有标签?

  3. 3

    查找标签之间的所有内容

  4. 4

    python - 如何使用beautifulsoup在网页中的某个文本之前获取所有<p>标签?

  5. 5

    如何使用python获取XML中的所有标签?

  6. 6

    从C中的XML文件获取相同多个标签之间的所有信息

  7. 7

    无法从XML文件获取所有标签

  8. 8

    如何包装标签的所有内容?

  9. 9

    如何重新索引某个类型的所有内容?

  10. 10

    如何在特定标签内的xml中获取所有嵌套标签和文本?

  11. 11

    Jsoup:提取2个随机标签之间的所有内容

  12. 12

    RegEx提取脚本标签之间的所有内容

  13. 13

    如何在iOS中解析html以获取其所有内容以及标签名称?

  14. 14

    如何删除两个XML标签之间的所有字符和行

  15. 15

    获取带有标识符的html标签之间的内容

  16. 16

    如何在Python中的两个html标记之间获取所有内容?

  17. 17

    获取html标签之间的内容

  18. 18

    如何在GitHub中获取某个版本的所有提交?

  19. 19

    我如何获取某个类的所有可用注释的列表

  20. 20

    BeautifulSoup-如何获取某个属性的所有值

  21. 21

    卷曲特定的div标签,直到获取所有内容

  22. 22

    如何在C#中的div标签之间获取内容

  23. 23

    获取两次提交之间的所有标签的列表

  24. 24

    HTML 解析 - 在所有标签之间获取文本

  25. 25

    无论使用C#在XML文件中的级别如何,都获取具有相同标签名称的所有标签

  26. 26

    如何使用XPath获取XML中的所有后代文本内容

  27. 27

    获取相同标签的第一个标签之后的所有标签的内容-Jsoup

  28. 28

    如何获取ul标签下的section标签的所有ID

  29. 29

    在SQL中获取某个字符之前的所有内容

热门标签

归档