как подавить префикс пространства имен с помощью Qt5.4 QXmlStreamWriter

У меня есть этот словарь.xml:

<?xml version="1.0" encoding="UTF-8"?>
<DictionarySet xmlns:mc="urn:fmosoft-map-creator" xmlns="urn:fmosoft-map-creator" Version="1">
    <Dictionary SourceLanguage="en_US" SourceLanguageIsPredefined="true" TargetLanguage="es" TargetLanguageIsPredefined="true">
        <Translation Source="asdf" Target="fdsa"/>
        <Translation Source="xyz" Target="jkl"/>
    </Dictionary>
    <Dictionary SourceLanguage="en_US" SourceLanguageIsPredefined="true" TargetLanguage="pt" TargetLanguageIsPredefined="true">
        <Translation Source="asdf" Target="wer"/>
        <Translation Source="xyz" Target="poi"/>
    </Dictionary>
</DictionarySet>

Я хочу скопировать файл с помощью QXmlStreamReader и QXmlStreamWriter, чтобы я мог вставлять новые элементы в копию. Вот мой код, чтобы просто скопировать файл (как только это сработает, я вставлю код в цикл, чтобы добавить дополнительные элементы по пути):

  QXmlStreamWriter writer(&output);
  if (!output.open(QIODevice::WriteOnly | QIODevice::Text)) {
    throw std::runtime_error("Unable to open the file for writing.");
  }

  writer.setAutoFormatting(true);
  writer.writeDefaultNamespace("urn:fmosoft-map-creator");

  while (!reader.atEnd()) {
    writer.writeCurrentToken(reader);
    reader.readNext();
  }

Это производит:

<?xml version="1.0" encoding="UTF-8"?>
<mc:DictionarySet xmlns="urn:fmosoft-map-creator" xmlns:mc="urn:fmosoft-map-creator" Version="1">
    <mc:Dictionary SourceLanguage="en_US" SourceLanguageIsPredefined="true" TargetLanguage="es" TargetLanguageIsPredefined="true">
        <mc:Translation Source="asdf" Target="fdsa"/>
        <mc:Translation Source="xyz" Target="jkl"/>
    </mc:Dictionary>
    <mc:Dictionary SourceLanguage="en_US" SourceLanguageIsPredefined="true" TargetLanguage="pt" TargetLanguageIsPredefined="true">
        <mc:Translation Source="asdf" Target="wer"/>
        <mc:Translation Source="xyz" Target="poi"/>
    </mc:Dictionary>
</mc:DictionarySet>

Атрибуты xmlns элемента DictionarySet перевернуты, но я не думаю, что это имеет значение. Более серьезная проблема заключается в том, могу ли я заставить QXmlStreamWriter НЕ использовать префикс «mc:» перед каждым именем элемента?


person David Burson    schedule 18.05.2015    source источник
comment
Не звонить writeDefaultNamespace?   -  person ahmed    schedule 18.05.2015
comment
нет, тогда я все еще получаю префикс mc:. Единственное отличие состоит в том, что я теряю пространство имен по умолчанию в DictionarySet, и остается только пространство имен mc: ‹mc:DictionarySet xmlns:mc=urn:fmosoft-map-creator Version=1›   -  person David Burson    schedule 18.05.2015


Ответы (1)


QXmlStreamReader::setNamespaceProcessing() является ответом:

  reader.setNamespaceProcessing(false);
person David Burson    schedule 18.05.2015
comment
Несколько неожиданно, поскольку на самом деле вы пытаетесь изменить текст. - person John Neuhaus; 03.12.2016