使用XSL删除XML开头(声明之前)的空白行以进行解析

时间:2013-01-17 23:17:05

标签: php xml xslt xml-parsing

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这应该有效:

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

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