【问题标题】:Remove blank lines at the beginning (before declaration) of XML with XSL for parsing使用 XSL 删除 XML 开头(声明前)的空行以进行解析
【发布时间】:2013-01-17 23:17:05
【问题描述】:

这是我的问题。我正在构建一个 Web 应用程序,它将 xml 数据提交给一个 govt 应用程序,该应用程序返回 xml 数据,然后我通过 xslt 将其解析为 html 以供查看。问题是返回的 xml 在声明之前有 2(两)个空行

<?xml version='1.0' standalone='yes'?>

xslt 不喜欢这样,不会将 xml 解析为 html。我知道这是问题所在,因为如果我通过记事本等编辑程序手动删除 2(两)个空白行,则转换效果很好。我无法控制返回的 xml 数据的格式,因此我需要找到一种方法,在继续解析之前先删除这 2(两)个空白行。

这是我的 xml(假设开头有 2 个空行):

<?xml version='1.0' standalone='yes'?>
<FHAENTITYDATA FHAVersionID = '1.0'>  
<PROCESSSTATUS>
<ProcessStatusCode>Success</ProcessStatusCode>
<ProcessStatusMessage sCode = '1'>Returned 1 zip code record(s)</ProcessStatusMessage>
</PROCESSSTATUS> 
</FHAENTITYDATA>

这是我的 xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" href="../css/fhac.css" type="text/css"/>
</head>
<body style="font-family:verdana;">
<div id="content">
<div id="fieldset">
<xsl:for-each select="//ProcessStatusCode">
  <tr><td><b><xsl:value-of select="."/></b></td></tr>
</xsl:for-each>
<xsl:for-each select="//ProcessStatusMessage">
  <tr><td><b><xsl:value-of select="."/></b></td></tr>
</xsl:for-each>
</table>
</div></div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

我的问题是,有什么方法可以在 xslt 之前或期间删除这些引导线?

【问题讨论】:

  • 这不是因为你缺少一个起始 标签是吗?
  • trim 工作吗?
  • 不在 XSLT 中,因为如您所见,XML 声明前的空格意味着文件不是格式正确的 XML,解析器正确地拒绝了它。在数据到达 XML 解析器之前,您必须剪掉前导空格。
  • 我很确定这就是 Supericy 的意思,因为文本链接到 PHP 文档。这也是我的建议。我认为在这种情况下,即使ltrim 也足够了。

标签: php xml xslt xml-parsing


【解决方案1】:

您的问题的答案是“否”。 XML 声明必须是 XML 解析器首先读取的内容,对于解析器来说,没有 XML 声明比在其他地方但在文件的第一行(/string/buffer/whatever)中拥有它更令人不安。

您的问题的答案确实是修剪。确切的实现取决于您可以使用的其他内容(在这种情况下为 php)。我建议您只删除 XML 声明之前的空行,而不是删除所有空行,因为您可能希望保留文本元素中的空行。

【讨论】:

  • Jos 和 Supericy 做对了。必须将数据转换为字符串并使用修剪然后解析。谢谢大家的帮助!!!
【解决方案2】:

这里应该可以工作:

preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "", $string);

它只会删除所有完全空白的行。您只需将文件内容放入$string
取自here

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2015-08-16
    • 2019-12-03
    相关资源
    最近更新 更多