2

我在 C++ 中有以下代码,试图将 xml 文件写入文件,但它一直给我这个问题“预期的”;在数字常量之前

int main () {
  ofstream myfile;
  myfile.open ("example.xml", ios::out| ios::app| ios::binary);
  if (myfile.is_open())
  {
    myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";
    myfile << "<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?> \n";
    myfile << "<WUFI1D> \n";

任何人都可以帮忙吗?

4

7 回答 7

4

您需要转义字符串中的引号,如下所示:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href=\"wufi1d.xslt\"?> \n";
myfile << "<WUFI1D> \n";

编译器在看到第一个字符串时认为该字符串已完成"- 因此您必须通过转义它来告诉它您的意思是从字面上将其包含在字符串中\"

有关 C++ 中字符转义码的完整列表,请参见此处

于 2012-10-17T00:52:07.617 回答
2

逃避你的 dbl-quotes:即

   myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";

应该

   myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";

举个例子

于 2012-10-17T00:51:51.293 回答
1

嵌入的引号需要转义。

这个:

myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";
myfile << "<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?> \n";

应该是这样的:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href=\"wufi1d.xslt\"?> \n";
于 2012-10-17T00:52:02.493 回答
1

您不能在字符串中使用原始引号,因为它们表示字符串的结尾。转义它们:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href="wufi1d.xslt"?> \n";
myfile << "<WUFI1D> \n";

您还可以在 C++11 中使用原始字符串文字,它将所有内容(包括空格)视为原始字符串的一部分:

myfile << 
R"(<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?>
<WUFI1D>
)";

如果字符串中有括号,请在其周围放置一个分隔符:R"###(st(ri)ng)###"

后者对于较长的文件可能更可取,这样您就不必转义所有内容,但请记住,所有换行符、空格等都包含在字符串中,并且语法突出显示可能会根据编辑器是否采用考虑到原始文字,以及缩进(如果每行开头不包含额外空格很重要),因为您必须将文字保留在每行的开头。

于 2012-10-17T00:54:27.333 回答
0

如代码荧光笔所示,您有未转义的双引号。\"当您想在输出的文本中显示双引号时使用。

于 2012-10-17T00:51:55.200 回答
0

您没有转义输出字符串中的引号,例如

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
于 2012-10-17T00:51:59.997 回答
0

您必须使用不是字符串分隔符的反斜杠来转义 (") 双引号:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
于 2012-10-17T00:52:04.713 回答