我要在HtmlView里面显示XML文件,想让xsl来控制网页的背景颜色。xsl文件的片段是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="Protocol">
<HTML>
<HEAD>
<TITLE>Protocol</TITLE>
</HEAD>
<BODY oncontextmenu="return false" bgcolor="#d4d0c8">
<xsl:apply-templates select="HDLC"/>
</BODY>
</HTML>
</xsl:template> <xsl:template match="HDLC">
           ......
</xsl:template>   
</xsl:stylesheet>
也就是说要动态改变bgcolor这个属性的值,应该如何处理?

解决方案 »

  1.   

    XSL文件就是XML文件
    用XMLDOM就可以编辑修改XSL文件如果你只想暂时改变一下XML的显示风格,而不是修改XSL文件
    你可以用
    IXMLDOMDocument/DOMDocument 分别加载 XML 和 XSL文件
    修改XSL
    然后
    transformNode Method
    Processes this node and its children using the supplied XSL Transformations (XSLT) style sheet and returns the resulting transformation.
      

  2.   

    1)是文本就文件导入成字符串,查找替换color.
    2)或者把你要显示XML文件动态加一个属性,xsl文件里面对这个属性进行解析处理.
      

  3.   

    你去看MSN的聊天记录那个XSL怎么处理的
      

  4.   

    搞定了,谢谢大家!
    IXMLDOMDocument2Ptr pXMLDoc = NULL;
    HRESULT hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument40));// Set parser property settings
    pXMLDoc->async =  VARIANT_FALSE;// Load XSL file
    hr = pXMLDoc->load(szFileName);// If document does not load report the parse error 
    if (hr != VARIANT_TRUE)
    {
    IXMLDOMParseErrorPtr  pError;
    pError = pXMLDoc->parseError;
    _bstr_t parseError =_bstr_t("At line ")+ _bstr_t(pError->Getline())
    + _bstr_t("\n")+ _bstr_t(pError->Getreason());
    MessageBox(NULL,parseError, "Parse Error",MB_OK);
    return;
    }// Otherwise, build node list using SelectNodes 
    // and returns its length as console output
    else
    {
    pXMLDoc->setProperty("SelectionLanguage", "XPath");
    }// Set the selection namespace URI if the nodes
    // you wish to select later use a namespace prefix
    pXMLDoc->setProperty("SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");IXMLDOMElementPtr pXMLDocElement = NULL;
    pXMLDocElement = pXMLDoc->documentElement;
    IXMLDOMNodePtr pNode = NULL;
    pNode = pXMLDocElement->selectSingleNode("//xsl:template/HTML/BODY");IXMLDOMElement* pElement;
    pNode->QueryInterface(__uuidof(IXMLDOMElement), (void**)&pElement);CComVariant vAttrValue(strColor);
    pElement->setAttribute(_bstr_t("bgcolor"), vAttrValue);CComVariant vFile(szFileName);
    pXMLDoc->save(vFile);
    pElement->Release();