我正在使用XML-> XHTL转换来打印基于模型的窗口。 我所做的是将我的模型转换为格式良好的xml。然后将xsl应用于它。
我的模型中的一些属性具有较大的文本值。有时这段文字可能包含“<”和“>”。每当出现此类文本时,“<”之间的文本和“>”被跳过了。
例如,如果我的文字是“This <item name> belongs to me.
”
我得到的输出是“This belongs to me.
”&lt; item name&gt;被跳过了。看起来属性值中的这些字符也被标识为xml标记的开头和结尾。它们被转换为&amp; lt;和&amp; gt;。因此,不打印该值。
任何人都可以告诉我,我如何在输出中保留属性值中的尖括号? 非常感谢任何帮助。
谢谢, Sahitya
P.S.-我也是xml处理和xsl的新手。
带有CData部分的XML:
“<descriptionText><![CDATA[This <item name> belongs to me.]]></descriptionText>
”
XSL摘录:
<tr><td><xsl:value-of select="descriptionText" disable-output-escaping="yes"/></td></tr>
expectedOutput:
This <item name> belongs to me.
ActualOutput:
This belongs to me.
修改
为了在应用程序级实现打印功能,我使用的是WebFrameLoadDelegate和NSPrintOperation的API。 成功创建webview后,委托API
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame;
。 请参阅以下API的实施:
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
NSPrintInfo *pi = [NSPrintInfo sharedPrintInfo];
if ([NSPrintInfo defaultPrinter])
{
[pi setPrinter:[NSPrintInfo defaultPrinter]];
}
[pi setTopMargin:5.0];
[pi setLeftMargin:5.0];
[pi setBottomMargin:10.0];
[pi setRightMargin:5.0];
[pi setHorizontalPagination:NSFitPagination];
[pi setVerticalPagination:NSFitPagination];
[pi setVerticallyCentered:YES];
[pi setHorizontallyCentered:YES];
[[self.webView preferences] setAutosaves: NO];
[[self.webView preferences] setShouldPrintBackgrounds:YES];
NSPrintOperation *printOperation = [[[self.webView mainFrame] frameView] printOperationWithPrintInfo:pi];
[printOperation runOperationModalForWindow:self.window delegate:self.delegate didRunSelector:self.callbackSelector contextInfo:nil];
}
答案 0 :(得分:1)
如果你
<
中包含&
和CDATA
的文字disable-output-escaping
然后This <item name> belongs to me
的输出将为This <item name> belongs to me
,浏览器将正确显示为This <item name> belongs to me.
如果您在 disable-output-escaping
上启用,则生成的HTML将为This <item name> belongs to me
,浏览器会认为<item name>
是未定义的HTML标记并跳过就像你描述的那样。
修改强>
这是一个功能齐全的例子:
simple.xml(输入)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="simple.xslt"?>
<simple>
<![CDATA[This <item name> belongs to me.]]>
</simple>
<强> simple.xslt 强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
输出(在浏览器中打开xml时)
This <item name> belongs to me.
答案 1 :(得分:0)
HTML文本中不能包含尖括号,需要将其转义为&gt;和&lt;。我希望CDATA部分解决转换为HTML的问题,但是当您查看HTML时,浏览器会忽略它不理解的标记。