xml回転htmlでのラベル処理
作業中にxsltでxmlをhtmlに変換する必要があり、結果的にhtmlにフォーマットされたラベルが必要になります.そうしないと()htmlのロードにエラーが発生します.これにより、
ラベルの処理中にも
キューが発生します.これにより、などの改行が1つ多くなります.
ラベルの処理中にも
キューが発生します.これにより、などの改行が1つ多くなります.
hello
html
xmlの
ラベルを
に変更する必要があります.
変換方法を紹介する:
void Ctest06072View::OnTest()
{
// TODO: 在此添加命令处理程序代码
MSXML2::IXMLDOMDocumentPtr xmlTree;
HRESULT hr = xmlTree.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if(FAILED(hr))
return;
xmlTree->load("d:\\test.xml");
SaveAsHtml(xmlTree, _T("d:\\test.html"), true);
}
bool Ctest06072View::SaveAsHtml(MSXML2::IXMLDOMDocumentPtr xmlTree, const wchar_t* cszFileName, bool bIndentation /*= true*/)const
{
try
{
if (bIndentation)
{
// Use xslt to indent the output xml
MSXML2::IXMLDOMDocument2Ptr pXSLTIndenter;
_bstr_t bstrXSLTIndenter =
L"
"
L"
"
L"
"
L"
"
L"
"
L"
"
L" <br />
"
L"
"
L"
"
L"
"
L"
"
L"
"
L"
"
L"
"
L"
"
L"
";
if (FAILED(pXSLTIndenter.CreateInstance(__uuidof(MSXML2::DOMDocument60))))
return false;
if (!pXSLTIndenter->loadXML(bstrXSLTIndenter))
return false;
std::wstring wstrResult = xmlTree->transformNode(pXSLTIndenter);
if (wstrResult.empty())
return false;
// Create another tree to write out the indented xml
MSXML2::IXMLDOMDocumentPtr treeAnother;
HRESULT hr = treeAnother.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if(FAILED(hr))
return false;
if (!treeAnother->loadXML(wstrResult.c_str()))
return false;
//// Write process instruction
//CXMLElement elementRoot = treeAnother.GetRootElement();
//CXMLPI xmlPI = treeAnother.CreateProcessingInstruction(L"xml", L"version=\"1.0\" encoding=\"utf-8\"");
//treeAnother.InsertChildBefore(xmlPI, elementRoot);
return SUCCEEDED(treeAnother->save(_variant_t(cszFileName)));
}
else
{
return SUCCEEDED(xmlTree->save(_variant_t(cszFileName)));
}
}
catch (_com_error e)
{
return false;
}
}
参考:https://stackoverflow.com/questions/14567794/using-br-tag-within-xml-for-xslt
https://www.oxygenxml.com/forum/topic5818.html
なんと何ヶ月もブログを書いていないので、プログラマーであることを忘れてしまいました.