我的问题是。我正在构建一个web应用程序,将xml数据提交给政府应用程序,该应用程序返回xml数据,然后我通过xslt解析为html以供查看。问题是返回的xml在声明
之前有2(两个)空行<?xml version='1.0' standalone='yes'?>
xslt不喜欢这样,它不会把xml解析成html。我知道这是问题所在,因为如果我通过编辑程序(如notepad)手动删除2(两)个空白行,转换就会完美地工作。我无法控制返回的xml数据的格式,因此我需要找到一种方法,在继续解析之前先删除这两行空白行。
这是我的xml(想象开头有两行空白行):
<?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之前或期间删除这些行头?
你的问题的答案是"不"。XML声明必须是XML解析器读取的第一件事,对于解析器来说,没有XML声明比在文件(/string/buffer/其他)的第一行中有XML声明要少得多。
你的问题的答案确实是一个修剪。确切的实现取决于您可以使用的其他工具(在本例中是php)。我建议您只删除XML声明之前的空行,而不是删除所有的空行,因为您可能希望保留文本元素中的空行。
这里应该可以工作:
preg_replace("/(^['r'n]*|['r'n]+)['s't]*['r'n]+/", "", $string);
它将简单地删除所有完全空白的行。你只需要将文件的内容放入$string