我有编码HTML数据的XML。我试图渲染数据,但似乎无法弄清楚如何。我能说的最好的是我需要let c = ContextMaker.makeMeAContext()
两次,但不知道该怎么做。
例如,这是我的XML片段:
disable-output-escaping="yes"
我的XSLT正在输出HTML。这是具有各种选项的呈现输出(HTML源)
<root>
<node value="&lt;b&gt;body&lt;/b&gt;" />
</root>
输出<xsl:value-of select="@value" />
&lt;b&gt;hi&lt;/b&gt;
输出<xsl:value-of select="@value" disable-output-escaping="yes" />
我希望将<b>hi</b>
输出到HTML源代码,以便将其实际渲染为粗体。那有意义吗?这可能吗?
答案 0 :(得分:0)
假设Sharepoint作为Microsoft .NET产品使用XslCompiledTransform,您可以尝试使用扩展&#34;脚本&#34;来实现unescaping和解析。 (嵌入在XSLT中的C#或VB或JScript.NET代码)如下:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:mf="http://example.com/mf"
exclude-result-prefixes="msxsl mf">
<msxsl:script language="C#" implements-prefix="mf">
<msxsl:using namespace="System.IO"/>
public string Unescape(string input)
{
XmlDocument doc = new XmlDocument();
XmlDocumentFragment frag = doc.CreateDocumentFragment();
frag.InnerXml = input;
return frag.InnerText;
}
public XPathNavigator ParseXml(string xmlInput)
{
using (StringReader sr = new StringReader(xmlInput))
{
return new XPathDocument(sr).CreateNavigator();
}
}
</msxsl:script>
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<html>
<head>
<title>Test</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node">
<div>
<xsl:copy-of select="mf:ParseXml(mf:Unescape(@value))" />
</div>
</xsl:template>
</xsl:stylesheet>
如果您可以访问支持XPath 3函数parse-xml
和parse-xml-fragment
的XSLT处理器(如任何版本的Saxon 9.7或Exselt或最新的Altova或XmlPrime),您可以编写该模板而无需扩展函数(在version="3.0"
样式表中)为
<xsl:template match="node">
<div>
<xsl:copy-of select="parse-xml(string(parse-xml-fragment(@value)))"/>
</div>
</xsl:template>
答案 1 :(得分:0)
转义是将var guardedLocation = L.latLng(...);
var thresholdDistance = 100; // In meters
var start;
function updateLocation(){
var userPosition = L.latLng(lat, lng);
user.setLatLng(userPosition);
if(map.distance(userPosition, guardedLocation) <= thresholdDistance) {
document.getElementById('setButton').style.background = 'purple'
soundAlarm();
isSet = false;
clearInterval(start);
}
}
start = setInterval(updateLocation, 5000);
转变为<
的过程。如果您停用了转义功能,它会将<
保留为<
。您希望实现的目标是将<
变为<
,这通常被称为“unescaping”。
在正常的事件过程中,解析器执行unescaping,而序列化程序执行转义。因此,如果你想要浏览字符,你需要让它们通过一个解析过程,这意味着你需要获取<
属性的内容,并通过像fn:parse-xml-fragment()这样的操作。在XPath 3.0中,或在您选择的处理器中的等效扩展函数。
答案 2 :(得分:0)
使用disable-output-escaping
输出结果,然后使用disable-output-escaping
在另一个XSL中再次对其进行处理。