2016-08-15 4 views
2

Можно ли добавить дополнительную информацию при создании и xml-документе с помощью dart-xml?Может ли XmlBuilder.processing принимать больше аргументов?

Оба нижеследующие работы прекрасно подходят для построения xml, xslt.

builder.processing('xml', 'version="1.0"'); 
builder.processing('xml-stylesheet', 'type="application/xml"'); 

С помощью xml Я бы хотел добавить инструкции UTF, чтобы помочь интернационализации.

builder.processing('xml', 'version="1.0"', 'encoding="UTF-8"'); 
//gives error '2 positional arguments expected, but 3 found' 

Попытка связаться с XSLT будет полезна.

builder.processing('xml-stylesheet', 'type="application/xml"', href="hieroglyph.xsl"); 
//gives 2 errors; '2 positional arguments expected, but 3 found' 
//'Undefined name 'href'' 

Я считаю, что это устанавливается в пределах dart-xml/lib/xml/grammar.dart и способа обработки().

processing() => string(OPEN_PROCESSING) 
     .seq(ref(nameToken)) 
     .seq(ref(space) 
      .seq(any().starLazy(string(CLOSE_PROCESSING)).flatten()) 
      .pick(1) 
      .optional('')) 
     .seq(string(CLOSE_PROCESSING)) 
     .map((each) => createProcessing(each[1], each[2])); 
    qualified() => ref(nameToken).map(createQualified); 

Нормальные элементы Xml могут иметь 0,1 или много аргументов, и как бы разрешить обработку() для этого? Это вопрос изменения списка, включающего более 2 аргументов, или это было бы более сложным и влечет за собой добавление других определений, таких как «href» для xslt или других для xsd?

ответ

2

Я считаю, dart-xml обрабатывает инструкции по обработке, как описано в standard. Это означает, что синтаксический анализатор просто разбивает все между <? и ?> на target и строку data.

Таким образом, строитель ожидает также двух строк как аргумент. Вы можете просто написать:

builder.processing('xml', 'version="1.0" encoding="UTF-8"'); 
builder.processing('xml-stylesheet', 'type="application/xml" href="hieroglyph.xsl"'); 

Вероятно, это было бы хорошей идеей, чтобы добавить метод к строителю, чтобы упростить создание таких деклараций XML. Не стесняйтесь обращаться к файлу.

+0

Hi Rengli, нет, он не работает. по какой-то причине существует предел для аргументов, которые может принимать builder.processing. Он возвращает ошибки, которые я набрал выше. Я буду продолжать пытаться. Я также открыл общую проблему в репозитории dart-xml, чтобы узнать, есть ли у кого-нибудь идеи или ввод, когда у них есть время. – lubi

+0

Я добавил пример в качестве теста для [GitHub] (https://github.com/renggli/dart-xml/commit/dc2adbd3d28abac1b08acf33174c71ca2b7afe44). Обратите внимание, что обработка занимает два аргумента: первый аргумент - это цель, а второй аргумент - данные (это просто похоже на два атрибута в вашем примере). –

+1

Думаю, я вижу, что вы сделали, чтобы сделать эту работу; просто удалите запятую и апострофию и превратите два аргумента в один. Это дает вам цель и строку данных. "'xml', 'version =" 1.0 "', 'encoding =" UTF-8 "' становится" 'xml', 'version = "1.0" encoding = "UTF-8"' "Это отлично работает для меня. , – lubi

Смежные вопросы