gpt4 book ai didi

C++ XLST 转换无法使用 MSXML 3.0

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:25 24 4
gpt4 key购买 nike

我是 C++ 的新手并继承了以下代码,这些代码应该使用 XSLT 文件转换给定的 XML 以仅吐出文本值。

它可以很好地加载 XML 和 XSLT,并且 transformnode() 调用返回成功,但尚未应用任何转换。底部的原始输出包含完整的原始 XML。

它正在使用 MSXML 3.0。我使用 Xselerator 来验证 XSLT 是否有效且有效(即返回字符串“This is a test message..”)。

这是代码(减去所有错误处理):

IXMLDOMNode *m_pXslt;

ESSXsltData::Initialise(void)
{
IUnknown *l_pUnknown = NULL;
IXMLDOMDocument *l_pXSLDocument = NULL;

HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_ALL, IID_IUnknown, (LPVOID *)&l_pUnknown);
hr = l_pUnknown->QueryInterface(IID_IXMLDOMDocument,(LPVOID *)&l_pXSLDocument);
CString l_sFileName(RetrieveXsltFileName().c_str() );
hr = l_pXSLDocument->load(l_vFileName, &l_bSuccess);

hr = l_pXSLDocument->QueryInterface(IID_IXMLDOMNode, (LPVOID *)(&m_pXslt) );
}

HRESULT ESSXsltData::ApplyXslt(const char *p_pszESSXml, std::vector< std::string > &p_CommentLines)
{
IUnknown *l_pUnknown = NULL;
IXMLDOMDocument *l_pDocument = NULL;


if (p_pszESSXml)
{
VARIANT_BOOL l_bSuccess;
HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_ALL, IID_IUnknown, (LPVOID *)&l_pUnknown);
hr = l_pUnknown->QueryInterface(IID_IXMLDOMDocument,(LPVOID *)&l_pDocument);

hr = l_pDocument->loadXML(CComBSTR(p_pszESSXml) , &l_bSuccess);
hr = l_pDocument->QueryInterface(IID_IXMLDOMNode, (LPVOID *)(&m_pXslt) );

BSTR l_bsOutput = NULL;
hr = l_pDocument->transformNode(m_pXslt, &l_bsOutput);

COLE2T l_AsciiOutput(l_bsOutput);
log << "AsciiOutput: " << l_AsciiOutput << "\n";
}
}

p_pszESSXml 字符串是:

<ESS><Message>This is a test message...</Message></ESS>

XSLT 是:

<?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" exclude-result-prefixes="msxsl">
<xsl:output method="text" indent="yes"/>
<xsl:template match="ESS">
<xsl:apply-templates select="Message"/>
</xsl:template>
<xsl:template match="Message">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>

最佳答案

已修复。

它正在重新分配 m_pXslt 以等于应该验证的 XML。

有人一直在复制粘贴。

关于C++ XLST 转换无法使用 MSXML 3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com