Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Генерация форм по xsd (https://javascript.ru/forum/css-html/38945-generaciya-form-po-xsd.html)

Newcomer 09.06.2013 14:48

Генерация форм по xsd
 
Здравствуйте!
Помогите сделать JS, который по схеме xsd генерирует соответствующую html-форму, после заполнения которой информация записывается в xml-документ.
Может, кто-то помочь? Или знает, где взять готовый?

danik.js 09.06.2013 16:35

Ты бы хотяб объяснил что такое xsd.

Newcomer 09.06.2013 17:10

XSD - это язык описания структуры документа XML. Этот язык также называют XML Schema. XSD дает возможность парсерам различать объекты и общую структуру XML документа.

Файл XML:

<?xml version="1.0"?>
<x:books xmlns:x="urn:books">
   <book id="bk001">
      <author>Writer</author>
      <title>The First Book</title>
      <genre>Fiction</genre>
      <price>44.95</price>
      <pub_date>2000-10-01</pub_date>
      <review>An amazing story of nothing.</review>
   </book>

   <book id="bk002">
      <author>Poet</author>
      <title>The Poet's First Poem</title>
      <genre>Poem</genre>
      <price>24.95</price>
      <review>Least poetic poems.</review>
   </book>
</x:books>


Файл XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="urn:books"
            xmlns:bks="urn:books">

  <xsd:element name="books" type="bks:BooksForm"/>

  <xsd:complexType name="BooksForm">
    <xsd:sequence>
      <xsd:element name="book" 
                  type="bks:BookForm" 
                  minOccurs="0" 
                  maxOccurs="unbounded"/>
      </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="BookForm">
    <xsd:sequence>
      <xsd:element name="author"   type="xsd:string"/>
      <xsd:element name="title"    type="xsd:string"/>
      <xsd:element name="genre"    type="xsd:string"/>
      <xsd:element name="price"    type="xsd:float" />
      <xsd:element name="pub_date" type="xsd:date" />
      <xsd:element name="review"   type="xsd:string"/>
    </xsd:sequence>
    <xsd:attribute name="id"   type="xsd:string"/>
  </xsd:complexType>
</xsd:schema>

bes 09.06.2013 17:57

ты уверен, что тебе нужна не java и не кроссбраузерное решение

Newcomer 09.06.2013 19:19

Уверен

bes 09.06.2013 22:17

тогда объясняй подробно что на какой стороне (клиент, сервер) должно происходить, что откуда приходит, что и где должно работать, контекст задачи и т.п.

with-love-from-siberia 10.06.2013 09:40

Цитата:

Сообщение от Newcomer
по схеме xsd генерирует соответствующую html-форму

Назначение xsd-файла - описание xml документа. Вы не сможете сгенерировать html-форму с помощью одного только xsd-файла. Вы можете использовать его для проверки, что используемый xml-файл - правильной структуры. Для генерации формы необходим xsl-файл.

Newcomer 11.06.2013 01:42

Вложений: 1
В общем нашел что-то похожее, только осталось разобраться как это работает. Поможете? Нужно чтобы все происходило на стороне клиента.

bes 12.06.2013 11:44

Цитата:

Сообщение от Newcomer
В общем нашел что-то похожее, только осталось разобраться как это работает. Поможете? Нужно чтобы все происходило на стороне клиента.

как тебе помочь, если ты игнорируешь обращения к тебе

<script src="jquery-ui-1.8.10.custom.min.js" type="text/javascript"></script>
<script src="jquery-1.4.4.js" type="text/javascript"></script>

Есть какие-нибудь соображения по этому поводу?

начинаешь отсюда
<form onsubmit="generateXml('sample.xsd', this.processed_xml); return false">


xsdForm.js
function generateXml(xsdFile, input_to_set) {

    var divParent;
    var field;
    var requiredField;
    var div;
    var divMessageError;
    var messageError;
    var submitForm = true;
    var type;
    var firstFieldError = null;

    try {
        var xml = xmlLoader(xsdFile);
        var tagRaiz  = xml.getElementsByTagNameNS('http://www.w3.org/2001/XMLSchema','schema')[0];
        var elemRoot = getNodeByTagName(tagRaiz, 'xs:element'); // elemento raiz

        validateMandatory();
        // adicionar xmlns="..." de acordo com o atributo 'targetNamespace' do
	// xml schema.
        var namespace = getValueAttributeByName(tagRaiz,'targetNamespace');
	//window.alert('namespace is ' + namespace)	
        var odoc = document.implementation.createDocument("", "", null);
        var generated = generateXmlFromNode(odoc, namespace, tagRaiz, elemRoot, "xsdform___");

        odoc.appendChild(generated);
        input_to_set.value = ((new XMLSerializer()).serializeToString(odoc));


    } catch (myError) {
        if (myError.name != null) {
            alert( myError.name + ': ' + myError.message + "\n" + myError);
        } else {
            alert(myError);
        }
	return false;
    }
}


и т.д.

lexitcd 28.11.2013 22:12

Доброго времени суток.
С jQuery не сталкивался, залил данный скрипт на локальный веб сервер, и он выкидывает ошибку "TypeError: xml is null". Если в браузере открыть index.html - все нормально. А если зайти на веб сервер-ошибка. Может кто сталкивался? Подскажите решение или куда копать. Заранее спасибо.


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