1

这是我的问题。我正在构建一个 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 之前或期间删除这些引导线?

4

2 回答 2

2

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

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

于 2013-01-18T09:19:05.547 回答
0

这应该工作:

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

它只会删除所有完全空白的行。您只需将文件的内容从此处$string
获取到 Taken

于 2013-01-17T23:21:19.623 回答