错误XTSE0620:解析xslt时解析错误string usint QT-XSLT
我正在使用xslt语法解析itunes库XML文件。错误XTSE0620:解析xslt时解析错误string usint QT-XSLT
这里的示例代码
void ITunesMlibParser::createXslForPlistItems(QString &out, int playlistID)
{
std::stringstream ss;
ss << "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
ss << "<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" xmlns:fn=\"fn\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">";
ss << "<xsl:output method=\"text\" />";
ss << "<xsl:template match=\"/\">";
// ss << "<xsl:variable name=\"myplaylist\" select=\"'6711'\"/>";
ss << "<xsl:variable name=\"myplaylist\" select=\"'"<< playlistID <<"'\">" ;
ss << "<xsl:variable name=\"playlist_tracks\" select=\"/plist/dict/array/dict[integer[preceding-sibling::key[1]='Playlist ID']=$myplaylist]/array/dict/integer[preceding-sibling::key[1]='Track ID']\" />";
ss << "<xsl:variable name=\"tracks\" select=\"/plist/dict/dict/dict[integer[preceding-sibling::key[1]='Track ID']=$playlist_tracks]\" />";
ss << "<xsl:for-each select=\"$tracks\">";
ss << "<xsl:value-of select=\"integer[preceding-sibling::key[1]='Track ID']\"/>";
ss << "<xsl:text>,</xsl:text>";
ss << "<xsl:value-of select=\"string[preceding-sibling::key[1]='Name']\"/>";
ss << "<xsl:text>,</xsl:text>";
ss << "<xsl:value-of select=\"integer[preceding-sibling::key[1]='Total Time']\"/>";
ss << "<xsl:text>,</xsl:text>";
ss << "<xsl:value-of select=\"string[preceding-sibling::key[1]='Kind']\"/>";
ss << "<xsl:text>,</xsl:text>";
ss << "<xsl:value-of select=\"string[preceding-sibling::key[1]='Location']\"/>";
ss << "<xsl:text>
</xsl:text>";
ss << "</xsl:for-each>";
ss << "</xsl:template>";
ss << "</xsl:stylesheet>";
ss << "";
out = QString::fromStdString(ss.str());
return;
}
考虑下面两行:
// ss << "<xsl:variable name=\"myplaylist\" select=\"'6711'\"/>";
ss << "<xsl:variable name=\"myplaylist\" select=\"'"<< playlistID <<"'\">" ;
如果播放列表= 6711的我硬编码的整数值,解析器作品。但如果我编程传递一个整数值,它会给出下面的错误。
Error XTSE0620 line 11, column 190: When attribute select is present on variable, a sequence constructor cannot be used.
// My comment --> line 11 is below or I am not sure if this is guilty line as it works with hard coded value.
<xsl:variable name="playlist_tracks" select="/plist/dict/array/dict[integer[preceding-sibling::key[1]='Playlist ID']=$myplaylist]/array/dict/integer[preceding-sibling::key[1]='Track ID']" />
我被困在这里,急需XSLT专家的一些输入。
我想你只需要确保任何具有select
属性的xsl:variable
元素都没有内容,所以请确保你有例如<xsl:variable name="var-name" select="2"/>
或<xsl:variable name="var-name" select="2"></xsl:variable>
。 所以用你的C++你可能想要尽管我没有真正的读写C++的训练。
我也想知道为什么你的XSLT/XPath的您正试图引用整数值作为这样你得到的XPath字符串,而XPath的也有数字。因此,根据您的需求,您可能需要删除单引号:ss << "<xsl:variable name=\"myplaylist\" select=\""<< playlistID <<"\"/>" ;
。
感谢它的工作。你马上就解决了这个问题。你节省了我的时间。 –
Consider below two lines:
// ss << "<xsl:variable name=\"myplaylist\" select=\"'6711'\"/>";
ss << "<xsl:variable name=\"myplaylist\" select=\"'"<< playlistID <<"'\">" ;
的错误是相当明显的:在第二种情况下,你不要关闭产生<xsl:variable>
元素。
必须(注意/
在最后):
ss << "<xsl:variable name=\"myplaylist\" select=\"'"<< playlistID <<"'\"/>" ;
非常感谢。我知道了。我的坏,这是愚蠢的错误,我正在寻找其他地方。 –
@Rakesh Singh:不客气。 –
问得好,+1。查看我的答案,了解错误及其简单解决方案。 –