1

これが私の問題です。私は、xmlデータをgovtアプリケーションに送信するWebアプリを構築しています。このアプリケーションは、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/ など) にある場合よりも動揺しません。

あなたの問題に対する答えは確かにトリムです。他に何を使用できるか (この場合は 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 に答える