我要在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这个属性的值,应该如何处理?
<?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这个属性的值,应该如何处理?
用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)或者把你要显示XML文件动态加一个属性,xsl文件里面对这个属性进行解析处理.
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();