Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Атрибут для xml при создании объекта (https://javascript.ru/forum/misc/82598-atribut-dlya-xml-pri-sozdanii-obekta.html)

DenZen 29.05.2021 22:38

Атрибут для xml при создании объекта
 
Искал как создать объект xml.
Объект нужен для того чтобы в последующем описывать разные xmlки, в тегах/атрибутах передавать данные в переменных, потом эти xml слать POST через API.

На стак нашел вот такую инструкцию

// Define class constructor
var SampleObject1 = function()
{
this.name = 'MySampleObject';
this.id = 1;
this.seed = 1.009;
this.createdAt = new Date();
this.obj = null;
};

// Create instance of serializer
var serializer = new Ant.Serializer();

// Register SampleObject1, so serializer gets to know how to deal with such objects
serializer.register('SampleObject1', SampleObject1);

// Create data that will be serialized
var object = new SampleObject1();
object.obj = new SampleObject1();

// Serialize and get string representation
var xml = serializer.save(object).toString();


Не пойму, как задать атрибут для тега при таком создании объекта?
И вообще смогу ли потом отправить такой document в теле запроса. Наверно его еще в стрингу надо преобразовать, как это можно сделать?

ksa 30.05.2021 11:12

Цитата:

Сообщение от DenZen
Не пойму, как задать атрибут для тега при таком создании объекта?

У объектов JS есть только свойства и методы.

ksa 30.05.2021 11:22

DenZen, вот примерчик как делать XML на нативном JS

// creates a Document object with root "<report>"
var doc = document.implementation.createDocument(null, "report", null);

// create the <submitter>, <name>, and text node
var submitterElement = doc.createElement("submitter");
var nameElement = doc.createElement("name");
var name = doc.createTextNode("John Doe");

// append nodes to parents
nameElement.appendChild(name);
submitterElement.appendChild(nameElement);

// append to document
doc.documentElement.appendChild(submitterElement);

https://askdev.ru/q/sozdanie-xml-dok...ascript-87228/

При таком подходе ты можешь добавлять и атрибуты, используя стандартный метод
https://learn.javascript.ru/attribut...rties#atributy

DenZen 30.05.2021 14:00

Спасибо! Воспользовался этим способом - закрывает мои задачи:)

DenZen 01.06.2021 17:18

ksa,
Вот такой вопрос возник, описал xml. Могу ли я переиспользовать этот же xml документ, заменяя там переменную, может быть как параметр можно передавать?

var xmlProcessingResult = document.implementation.createDocument("", "", null);
var requestProcessingResultXmlElement = xmlProcessingResult.createElement("a");
requestProcessingResultXmlElement.setAttribute("1", "b");
requestProcessingResultXmlElement.setAttribute("2", "c");
var processingResultExtSystemXml = xmlProcessingResult.createElement("d");
processingResultExtSystemXml.innerHTML = foo(это переменная);
requestProcessingResultXmlElement.appendChild(processingResultExtSystemXml);
xmlProcessingResult.appendChild(requestProcessingResultXmlElement);
xmlRequestProcessingResult = new XMLSerializer().serializeToString(xmlProcessingResult)

рони 01.06.2021 17:26

DenZen,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

ksa 01.06.2021 20:30

Цитата:

Сообщение от DenZen
Могу ли я переиспользовать этот же xml документ, заменяя там переменную, может быть как параметр можно передавать?

Не понял я вопроса... :-?
Параметр можно передать только функции или методу. При формировании алгоритма ты волен делать все что угодно.
Т.е. тебя ограничивает лишь твоя фантазия.

Сейчас на всяких React.js или Vue.js такие варианты выдумывают при формировании ДОМ - закачаешься.

DenZen 01.06.2021 21:23

Сорри, что-то я не объяснил. Я xml использую чтобы отправлять его на сервер запросом api. Эти xml по структуре похожи, меняются только некоторые атрибуты или данные внутри тега. Вот я и пытаюсь понять, описав xml документ для одного запроса, и чтобы не копировать весь xml в другой запрос заменив в нем только атрибут, хотелось бы переиспользовать xml который я описывал для первого запроса.

ksa 01.06.2021 21:31

Тогда сделай функцию, которая и будет формировать тот ХМЛ, в зависимости от неких параметров...
Будешь вызывать ее в своих АПИ.

DenZen 03.06.2021 10:17

ksa,
Получилось сделать функцию с параметрами, которая передает нужный атрибут или значение тега. Не могу сообразить как то можно, что бы зависимости от одного параметра был один тег xml, а от другого параметра другой тег xml? Просто в конце сделать логику if...else?:
if (param === ""){
var a = xm.createElement("a");
a.innerHTML = foo(это переменная);
xml.appendChild(a);
} else {
var b = xm.createElement("b");
b.innerHTML = foo(это переменная);
xml.appendChild(b);
}

ksa 03.06.2021 13:45

DenZen, какие xml-конструкции ты хочешь в итоге получать? :-?

DenZen 04.06.2021 12:03

Пока писал вроде разобрался, в итоге передаю в функцию параметр и от этого формирую нужный тег для xml:
if (a === "date"){
    var dateXml = xmlOrder.createElement("Date");
    dateXml .innerHTML = "2021-12-30";   
    requestOrder.appendChild(dateXml);
    } else if (b === "calendar") {
        var dateXml = xmlOrder.createElement("Interval");
        dateXml.innerHTML = "33";
        requestOrder.appendChild(dateXml);
    } else if (c === "working") {
        var dateXml =xmlOrder.createElement("Working");
        xmlOrder.innerHTML = "77";
        requestOrder.appendChild(dateXml);
    }

requestOrder.appendChild(orderExtXml);
requestOrder = new XMLSerializer().serializeToString(requestOrderXml);
return requestOrder;

DenZen 02.07.2021 15:50

ksa,
добрый день! По моей теме еще вопрос возник. При определенном условии хотелось бы генерить несколько одинаковых атрибутов, к примеру передаю условие 3 => генерится 3 одниковых атрибута. Это возможно?

ksa 02.07.2021 19:23

Цитата:

Сообщение от DenZen
генерится 3 одниковых атрибута

Это как? :blink:

DenZen 03.07.2021 14:18

Да непонятно пока, думал может просто циклом for, но фиг его знает как это организовать((

ksa 04.07.2021 16:16

DenZen, с точки зрения передачи или хранения данных 3 одинаковых атрибута - полная бессмыслица.

Как я понимаю "3 одинаковых атрибута"
<item attr='1' attr='2' attr='3' />

DenZen 08.07.2021 08:52

ksa, емае че я написал-то. Теги имел ввиду
<Product>1</Product>
<Product>2</Product>
<Product>3</Product>

ksa 08.07.2021 11:26

Цитата:

Сообщение от DenZen
Теги имел ввиду

Тегов можно добавлять сколько хочешь...
Но их нужно (или желательно) "завернуть" в родительский тег.
Например так
<ProductList>
   <Product>1</Product>
   <Product>2</Product>
   <Product>3</Product>
</ProductList>

DenZen 27.07.2021 11:42

ksa,
Вот да, так примерно и надо. А могу я как-то циклом создать нужное количество? Если мне к примеру нужно 50 продуктов for (i = 0; i >= 50; i++)

ksa 27.07.2021 12:06

Цитата:

Сообщение от DenZen
А могу я как-то циклом создать нужное количество?

Не мона, а нуна! (с) :yes:


Часовой пояс GMT +3, время: 11:03.