如何在XML CDATA中添加属性?XSLT



Xml:

<Frames>
<bannerFrame1>
<![CDATA[
<iframe src="https://image.domain.com/promobanner1.html" height="320" width="629"                scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe>
]]>
</bannerFrame1>
<bannerFrame2>
<![CDATA[
<iframe src="https://image.domain.com/promobanner2.html" height="320" width="629"                scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe>
]]>
</bannerFrame2>
</Frames>

XML:bannerFrame1/iframe CDATA源值可能看起来像这个

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<body>
<div>
<img src="banners/banner1.gif" border="0" alt="Banner"/>
</div>
</body>
</html>

XSLT:I正在获取bannerFrame1 的CDATA值

<xsl:template match="/">
<xsl:value-of select="Frames/bannerFrame1" disable-output-escaping="yes" />
</xsl:template>

我试图在CDATA"bannerFrame1"的图像上添加一个谷歌分析事件跟踪代码。如何在<img src="banners/banner1.gif" border="0" alt="Banner">上添加onclick属性,同时获得<bannerFrame1>的CDATA值?真的有可能吗?提前谢谢。

Expected output: 
<iframe>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<body>
<div>
<img src="banners/banner1.gif" border="0" alt="Banner" onclick ="GoogleEventTracker();"/>
</div>
</body>
</html>
</iframe>

Iframe来源:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Pragma" content="no-cache">
<link rel="stylesheet" type="text/css" href="css/style.css">
<link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.7.2.custom.css">
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="custombanner/jquery.min.js"> </script>
<script type="text/javascript" src="custombanner/jquery.cycle.all.2.74.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
<!--<script type="text/javascript" src="js/custom.js"></script>-->
<title>domain - It's time everyone flies</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="script" http-equiv="Content-Script-Type" content="text/javascript">
<meta name="script" http-equiv="Content-Style-Type" content="text/css">
<!--<script type="text/javascript" src="js/soapclient.js"></script>-->
<style type="text/css">
img, div, a, input
{
behavior: url(iepngfix.htc);
}
#nav
{
float: left;
left: 8px;
margin: 15px;
position: absolute;
top: 235px;
padding-left: 242px; /* for 4 frames */ /*padding-left: 278px; /* for 3 frames */ /*padding-left: 312px; /* for 2 frames */ /*padding-left: 242px; /* for 4 frames */
margin-left: 1px;
margin-right: 1px;
margin-bottom: 1px;
height: 40px; /*background :url("banners/gradient.gif") repeat-x scroll 0 0 transparent;*/
}
#nav li
{
display: block;
float: left;
list-style: none outside none;
margin: 2px;
padding: 2px;
padding-right: 4px;
margin-top: 8px;
width: 25px;
}
#nav a
{
border: 1px solid #ffffff;
display: block;
padding: 0;
width: 25px;
}
#nav img
{
border: medium none;
display: block;
height: 20px;
width: 25px;
opacity: 0.5;
filter: alpha(opacity=50);
}
#nav li.activeLI
{
background: #ff0000;
}
#nav li.activeLI img
{
opacity: 1;
filter: alpha(opacity=100);
}
</style>
</head>
<body marginwidth="0" marginheight="0">
<div class="hero">
<div class="slideshow mainpromo" id="slideshow" style="margin-bottom: 50px;">
<!--            <a href="http://www.domain.com/Pages/SeatSalePromo.aspx" target="_top">
<img src="banners/banner1.gif" border="0" alt="Banner" /></a>-->
<img src="banners/banner1.gif" border="0" alt="Banner">
</div>
<ul id="nav">
</ul>
<div class="rightpane">
<!--<a href="http://www.domain.com" target="_top"><img src="banners/promo-fares.jpg" width="206" height="214" border="0" alt="Thumbnail" /></a>-->
<img src="banners/lite-fares.jpg" width="206" height="214" border="0" alt="Thumbnail">
<a href="https://book.domain.com/Register.aspx" target="_top"><img src="images/registernow.gif" width="203" height="20" border="0" alt="See all Low Fares"></a>  
<!--<center><a href="http://www.domain.com/Pages/WebCheck-in.aspx" target="_top"><font size="2" color="#ff6600">Web Check-In</font></a></center>-->
<!--<a href="http://domain.com" target="_blank"><img src="images/topdestinatios_btn.gif" alt="" width="149" height="26" border="0" /></a>-->
</div>
<div id="alerts">
<p>
<strong>Seat Sale Alert! </strong>Be the first to know thePromos. <a target="_top" href="http://www.domain.com/pages/emms-signup.aspx">SUBSCRIBE NOW »</a>
</p>
<p>
<!--                <strong>Seat Sale Availability</strong> Find the best time to travel. <a target="_top"
href="http://www.domain.com/documents/seat_map.pdf">DOWNLOAD PDF &raquo;</a>-->
</p>
<div class="clear">
</div>
</div>
<div style="clear: both;">
</div>
<div id="mascot">
<img src="images/mascot.png" alt="">
</div>
<div style="clear: both;">
</div>
</div>

</body></html>

如果你控制image.domain.com,那么你可以毫不费力地添加该属性,但你不需要这种全面的方法。如果你不控制image.domain,你就没运气了。(至少,我衷心希望如此。)

如果我正确理解了您的问题,那么您正在询问如何使用XSLT来更改由不同服务器提供的数据,将其作为XSLT样式表输出中iframe的内容。XSLT很难做到这一点,因为在您的示例中,数据是由浏览器从image.domain.com中提取的,作用于样式表的输出,而不是样式表。如果浏览器中运行的样式表试图直接检索数据并将其插入到输出文档中以代替iframe,则浏览器会阻止这种尝试,认为这违反了同源策略。

我印象深刻——我以为我永远不会对同源政策说一句好话,也不会觉得它有任何有用的目的,但你已经证明我错了。

在服务器上运行的样式表可能能够解析足够多的bannerFrame1的字符串值,以识别所指向的URI,获取数据,并将其插入到输出中以代替iframe。要使其正确显示可能很有挑战性。

或者,你可以让iframe不指向image.domain.com,而是指向你自己服务器上的一个代理,该代理从image.domaincom获取数据,插入你的跟踪属性,并将修改后的数据交给浏览器。(克服同源策略的标准方法是:在进入的过程中从自己的服务器上弹出数据。同源策略并不能阻止每个人都包括来自其他来源的数据,只有那些无法设置代理的人。)

最新更新