Xml 使用XSL-FO在PDF中添加换行符?

Xml 使用XSL-FO在PDF中添加换行符?,xml,xslt,xsl-fo,Xml,Xslt,Xsl Fo,正在尝试基于XML和使用XMLSpy的文件创建PDF文件 我试图根据字段内容将字段分成两行 例如,如果我的varialbe=“John Doe AKA Johnny D”,我想这样看: 无名氏 约翰尼·D 我的问题是,即使网络上有所有的样品,我也不能让它工作 这是我的密码: 所以基本上,每次我找到“AKA”字符串,我想把字段分成两行。 因此,我的代码找到字符串,创建新变量,但仍显示在一行中。 我尝试过使用各种技术创建一个带有空行的变量,但仍然显示在一行中 有什么想法吗?请参阅关于

正在尝试基于XML和使用XMLSpy的文件创建PDF文件

我试图根据字段内容将字段分成两行

例如,如果我的varialbe=“John Doe AKA Johnny D”,我想这样看:

无名氏

约翰尼·D

我的问题是,即使网络上有所有的样品,我也不能让它工作

这是我的密码:


所以基本上,每次我找到“AKA”字符串,我想把字段分成两行。 因此,我的代码找到字符串,创建新变量,但仍显示在一行中。 我尝试过使用各种技术创建一个带有空行的变量,但仍然显示在一行中

有什么想法吗?

请参阅关于使用十六进制实体引用和
换行处理


编辑

我从注释中提取了您的代码,并将其放在示例XSLT样式表的模板中。我唯一改变的是:

  • 我将您的
    换行符
    变量更改为
    
    
  • 我将
    linefeed treatment=“preserve”
    添加到您的
    fo:block
    使用一个伪XML文件和XSLT样式表,我生成了一个XSL-FO文档,当使用FOP呈现时,它会在单独的行上生成“johndoe”和“Johnny D”

    以下是XML文件:

    <doc>
      <MyField>John Doe AKA Johnny D</MyField>
    </doc>
    

    @daniel haley的答案仍然会生成一对名称,但来源为:

    <doc>
        <MyField>John Doe AKA Johnny D</MyField>
        <MyField>Johnny D AKA John Doe</MyField>
        <MyField>John Smith</MyField>
    </doc>
    

    这对我不起作用。我使用了很多在这里找到的样本,但似乎没有任何效果。你的链接没有通过。另外,您是否在使用ApacheFop作为处理器?对不起,当我说,在这里找到,我是说在这个论坛上。。。是的,我正在使用ApacheFop。你可以发布更多的代码,以便我/我们可以尝试重现这个问题吗?我知道这是一篇较旧的文章,但真糟糕,搜索了一个小时后它才救了我:)
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <xsl:output indent="yes"/>
      <xsl:strip-space elements="*"/>
    
      <xsl:template match="node()|@*">
        <xsl:copy>
          <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="/">
        <fo:root>
          <fo:layout-master-set>
            <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
              <fo:region-body margin="1in" margin-top="1.5in"/>
            </fo:simple-page-master>
          </fo:layout-master-set>
          <fo:page-sequence master-reference="my-page">
            <fo:flow flow-name="xsl-region-body">
              <xsl:apply-templates/>
            </fo:flow>
          </fo:page-sequence>
        </fo:root>
      </xsl:template>
    
      <xsl:template match="doc">
        <xsl:variable name="newline" select="'&#xA;'"/>        
        <xsl:variable name="MyVar">
          <xsl:choose>
            <xsl:when test="contains(//MyField,'AKA')">
              <xsl:value-of select="concat(substring-before(//MyField,'AKA'),$newline,substring-after(//MyField,'AKA'))"/>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="//MyField"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
        <fo:block linefeed-treatment="preserve">
          <xsl:value-of select="$MyVar"/>
        </fo:block>
      </xsl:template>
    
    </xsl:stylesheet>
    
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
       <fo:layout-master-set>
          <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
             <fo:region-body margin="1in" margin-top="1.5in"/>
          </fo:simple-page-master>
       </fo:layout-master-set>
       <fo:page-sequence master-reference="my-page">
          <fo:flow flow-name="xsl-region-body">
             <fo:root>
                <fo:layout-master-set>
                   <fo:simple-page-master page-height="11in" page-width="8.5in" master-name="my-page">
                      <fo:region-body margin-top="1.5in" margin="1in"/>
                   </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference="my-page">
                   <fo:flow flow-name="xsl-region-body">
                      <fo:block linefeed-treatment="preserve">John Doe 
     Johnny D</fo:block>
                   </fo:flow>
                </fo:page-sequence>
             </fo:root>
          </fo:flow>
       </fo:page-sequence>
    </fo:root>
    
    John Doe
    Johnny D
    
    <doc>
        <MyField>John Doe AKA Johnny D</MyField>
        <MyField>Johnny D AKA John Doe</MyField>
        <MyField>John Smith</MyField>
    </doc>
    
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output indent="yes" />
    <xsl:strip-space elements="*" />
    
    <xsl:template match="/">
        <fo:root>
            <fo:layout-master-set>
                <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in">
                    <fo:region-body margin="1in" margin-top="1.5in" />
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="my-page">
                <fo:flow flow-name="xsl-region-body">
                    <xsl:apply-templates />
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
    
    <!-- Could change to match on 'MyField/text()[contains(., ' AKA ')]'
         if necessary. -->
    <xsl:template match="text()[contains(., ' AKA ')]">
        <xsl:value-of select="substring-before(., ' AKA ')" />
        <fo:block />
        <xsl:value-of select="substring-after(., ' AKA ')" />
    </xsl:template>
    
    <xsl:template match="MyField">
        <fo:block>
            <xsl:apply-templates />
        </fo:block>
    </xsl:template>
    
    </xsl:stylesheet>