[英]how to put xml string in html table cell using perl
我在變量中有xml消息,並希望使用表在瀏覽器上顯示。 我在下面嘗試過,但是在呈現給瀏覽器的過程中,實際的xml字符串未顯示。
open FH, ">report.html";
my $x=qq(<?xml version="1.0" encoding="utf-8" ?>
<Soap-ENV:Envelope xmlns:Soap-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:msdwHdr="http://xml.xdft.com/ns/appmw/soap/1.0/header" version="1.1">
<Soap-ENV:Body>
<CheckTrade>
<tradeId>492195</tradeId>
</CheckTrade>
</Soap-ENV:Body>
</Soap-ENV:Envelope>);
print FH "<table><tr><td>test</td><td>$x</td></tr></table>";
如果我運行上述代碼並在瀏覽器中打開report.html,則能夠看到第一個TD值,而在第二個TD中,它僅顯示492195(這是Tradeid的一部分),我希望看到完整的$ x值。 我看了看html的源代碼,它顯示為與$ x相同,但在瀏覽器中卻沒有。
______________
test | 492195
______|________
您遇到的問題是XML文檔無法在HTML中很好地播放。 所有<>
字符都會混淆您的瀏覽器,因此您只獲得tradeID的值。 查看此答案 ,了解如何在將XML字符串放入HTML文檔之前對其進行編碼。
您還可以通過將其放在[CDATA][1]
部分中來對整個XML字符串進行轉義:
print FH "<table><tr><td>test</td><td><![CDATA[$x]]></td></tr></table>";
當然,這僅在SOAP消息本身不包含CDATA的情況下才有效。 如果發生這種情況,您需要對其進行分解:用]]]><![CDATA[]>
替換SOAP消息中的CDATA結束標記]]>
(在標記中間關閉CDATA部分,然后開始一個新的,以標記的結尾開始:
$x=~ s{]]>}{]]]><![CDATA[]>}g;
或更清楚地:
$x=~ s{]]>} # CDATA end marker
{] # beginning of the end marker
]]> # end the first CDATA section
<![CDATA[ # start a new CDATA section
]>}gx; # end of the end marker
關於您的Perl風格的幾點注意事項:
當前的最佳做法是通過使用詞法來避免裸字文件句柄,
還可以考慮使用3個args形式的open更好,在您的情況下,可能需要使用編碼:
所以寫這個可能更好:
open( my $fh, '>:utf8', 'report.html') or die "cannot open reports.html: $!";
...
print {$fh} "<table><tr><td>test</td><td><![CDATA[$x]]></td></tr></table>";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.