xml - 源文件中的长文本字符串,导致输出文件中出现多行
问题描述
我需要在技术测试平台中运行 XSLT 生成的输出文件 (XHTML)。
每次我使用长文本字符串(来自源文件)并执行 XSLT 时,测试台都不会批准该文档。原因似乎是输出文件(XHTML)正在使用长文本字符串并将其分成几行。
在“xsl:output”中,我设置了属性“suppress-indentation”,但看起来该属性只控制节点元素(标签)的缩进,而不是节点值的长度。
在我的环境中,我还控制了终端中的输出文件,以确保问题不仅与我的编程文本编辑器隔离。
有没有办法控制 XSLT 何时判断将长字符串切割成几行的长度?
我的环境:
来自 Saxonica 的 Saxon-HE 10.5J
Java 版本 11.0.11
您可以在 xsltfiddle 中看到行为: https ://xsltfiddle.liberty-development.net/jxWZS72/4
数据:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<content-cut>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</content-cut>
<content-no-cut>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt</content-no-cut>
</data>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
>
<xsl:output method="xhtml" indent="yes" suppress-indentation="content" html-version="5"/>
<xsl:template match="data">
<html>
<head>
<title>MyTitle</title>
</head>
<body>
<string-one>
<xsl:value-of select="content-cut"/>
</string-one>
<string-two>
<xsl:value-of select="content-no-cut"/>
</string-two>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
结果:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><title>MyTitle</title></head>
<body>
<string-one>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
</string-one>
<string-two>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt</string-two>
</body>
</html>
想要的结果:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><title>MyTitle</title></head>
<body>
<string-one>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </string-one>
<string-two>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt</string-two>
</body>
</html>
解决方案
看起来您的“测试平台”依赖于 XSLT 规范不需要的行为,并且实际应用程序可能不需要。在这种情况下,最好的办法一般是放宽对测试台的要求,以免对转换输出提出不合理的要求。
无论如何,测试序列化的 XML 输出总是很棘手,尤其是在indent="yes"
已设置时,这使得输出实现的许多方面都是定义的。
您正在使用,但在序列化输出中suppress-indentation="content"
没有调用元素。content
您是否尝试过`suppress-indentation="string-one string-two"?我认为这应该按照规范工作;如果没有,我们可能应该修复它。
但我认为您可能应该回顾一下您是如何进行测试的。比较序列化的缩进输出对于舒适来说太脆弱了。
推荐阅读
- wcf - WCF 元数据在 HTTPS 上显示不正确的服务 URI
- aggregation-framework - 聚合端点的用户限制资源访问
- amazon-web-services - 单次写入订购商品
- mysql - NuGet 包 MySql.Data 不兼容 UWP 10.0.10586
- cassandra - 如何从 cassandra 中删除数据
- python - 为什么 != 运算符不调用我的 '__neq__' 方法?
- angular - 使订阅在 Angular 4 中等待主题
- r - 错误:当 R 中没有安装 NA 值时需要 TRUE/FALSE 的缺失值
- html - 在 div 之间添加边界线
- java - 如果语句中 x 可以等于一系列数字/一个数字范围?