簡體   English   中英

如何使用perl將xml字符串放入html表單元中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM