如何使用 XSL 在 XML 中的特定 td 中保留新行和空白

Posted

技术标签:

【中文标题】如何使用 XSL 在 XML 中的特定 td 中保留新行和空白【英文标题】:How to preserve new lines and white space in a particular td in XML using XSL 【发布时间】:2019-08-06 02:26:27 【问题描述】:

enter image description here我正在尝试仅为使用 XSL 在 XML 中具有随机 id 的特定 td 保留新行和空白

所以基本上我想在 td 中保留新行,其中包含一些大文本,如下所示

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href=new.xsl'?>
  <document>
    <div>
      <table  border="1">
        <thead>
          <tr>
            <th>ID</th>
            <th>Date</th>
            <th>Data Source</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>123123</td>
            <td>03/20/2018 04:49:40 PM MST</td>
            <td>Test Source</td>
          </tr>
          <tr>
            <td id="random_id_notes" colspan="3">Patient Information Name: Test, FIRST NAME Age: 108 Years DOB: 01/11/1911 Sex: Female First Para# Him boisterous invitation dispatched had connection inhabiting projection. By mutual an mr danger garret edward an. Diverted as strictly exertion
              addition no disposal by stanhill. This call wife do so sigh no gate felt. You and abode spite order get. Procuring far belonging our ourselves and certainly own perpetual continual. It elsewhere of sometimes or my certainty. Lain no as five
              or at high. Everything travelling set how law literature. Sec para# But why smiling man her imagine married. Chiefly can man her out believe manners cottage colonel unknown. Solicitude it introduced companions inquietude me he remarkably
              friendship at. My almost or horses period. Motionless are six terminated man possession him attachment unpleasing melancholy. Sir smile arose one share. No abroad in easily relied an whence lovers temper by. Looked wisdom common he an be
              giving length mr. Good #Third Para Home Call park out she wife face mean. Invitation excellence imprudence understood it continuing to. Ye show done an into. Fifteen winding related may hearted colonel are way studied. County suffer twenty
              or marked no moment in he. Meet shew or said like he. Valley silent cannot things so remain oh to elinor. Far merits season better tended any age hunted.

            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </document>

我尝试过的 XSL,但它影响了我不想要的所有 td

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:n1="urn:hl7-org:v3" xmlns:in="urn:lantana-com:inline-variable-data" xmlns:sdtc="urn:hl7-org:sdtc">
    <xsl:output method="html" indent="yes" version="4.01" encoding="ISO-8859-1" doctype-system="http://www.w3.org/TR/html4/strict.dtd" doctype-public="-//W3C//DTD HTML 4.01//EN"/>
    <xsl:template match="n1:td">
            <span class="content_span">
                <xsl:apply-templates select="@styleCode"/>
                  <xsl:value-of select="." disable-output-escaping="yes"/>
            </span>
        </xsl:template>

使用的css

 .content_span
 font-family: Verdana, Tahoma, sans-serif; 
 display: inline; 
 white-space: pre;

【问题讨论】:

你能把你的输入 XML 和 xslt 的一些优化源放在哪里吗? 【参考方案1】:

如果你想保留空格,我会避免使用indent="yes"

在 XSLT 3.0 中,您可以使用 suppress-indentation="td" 覆盖特定元素类型的 indent="yes",但即便如此,您也无法对特定元素实例执行此操作。

但是,我不能 100% 确定这是您的问题。事实上,我不是 100% 确定我理解您的要求。您是否希望 XML 中每行文本开头的 12 个空格在呈现的 HTML 中可见?

其他一些cmets:

(a) 我不知道“n1”命名空间前缀想要达到什么目的

(b) disable-output-escaping 不是魔法仙尘。除非您确切知道它的作用,否则不要使用它。在您的特定情况下,没有什么可以转义,因此禁用转义无效。

(c) 在 XML 中使用 mm/dd/yyyy 日期会让您的生活变得不必要地困难。

【讨论】:

感谢您提供您的想法 1.“n1”是公司使用的命名空间我真正想要做的是在这张图片i.stack.imgur.com/ulQRB.jpg 您显示的图像中的文本似乎与您的 XML 输入关系不大。 @VimalTom 按照 Kay 博士的想法,如果您用于显示请求的图像来自 HTML 页面,那么您将需要一个 pre 元素

以上是关于如何使用 XSL 在 XML 中的特定 td 中保留新行和空白的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSL 选择特定元素节点中的所有文本节点?

xsl:在 for-each-group() 中排序

使用匹配特定选择器的 XSL 对 XML 进行排序并保持 XML 相同

如何使用 XSL 中的每个组

XSL 选择样式文本和 td

xsl如何根据来自不同元素的属性汇总一种特定类型元素的总和