保留“<”将XSLT应用于xml时

时间:2012-07-01 13:46:23

标签: xml cocoa xslt xml-parsing

我正在使用XML-> XHTL转换来打印基于模型的窗口。 我所做的是将我的模型转换为格式良好的xml。然后将xsl应用于它。

我的模型中的一些属性具有较大的文本值。有时这段文字可能包含“&lt;”和“&gt;”。每当出现此类文本时,“&lt;”之间的文本和“&gt;”被跳过了。 例如,如果我的文字是“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];
}

2 个答案:

答案 0 :(得分:1)

如果你

  1. 在XML输入中的<中包含&CDATA的文字
  2. 使用disable-output-escaping
  3. 然后This <item name> belongs to me的输出将为This &lt;item name&gt; 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时,浏览器会忽略它不理解的标记。