создать веб-форму из выражений xpath

Я хочу создать приложение для редактирования некоторых полей в сложных XML-документах. (исо19139). Идея состоит в том, чтобы определить поля, которые следует редактировать, с помощью выражений xpath в файле конфигурации и автоматически сгенерировать соответствующую форму.

Таким образом, приложение будет извлекать текущие значения полей из xml с помощью xpath, отображать их в форме и помещать новые значения при отправке формы.

Извлечение и запись значений выполняется путем создания, изменения и записи DOM, но мне интересно, есть ли у кого-нибудь из вас хорошее предложение, как я могу автоматически создать веб-форму из списка выражений xpath и связать поля формы с полями xml на который ссылается xpath.

Существуют инструменты для создания XForms для XML-документов, для которых известна грамматика, но они не являются решением, поскольку соответствующая грамматика слишком сложна.

Вот набросок. у нас есть XML-документ, содержащий личную информацию, в котором мы хотим отредактировать почтовый адрес и брата. Выражения xpath в файле конфигурации определяют поля, которые должны быть редактируемыми.

файл конфигурации: (пример в xml)

<config>
<field>
  <xp>/person/home/street/</xp>
<name>Address</name>
</field>
<field>
 <xp>/person/family/brother/</xp>
 <name>Family (brother)</name>
</field>
</config>

применение:

создаст веб-форму с текстовым полем для адреса и брата.

спасибо Курт


person user671534    schedule 22.03.2011    source источник
comment
Похоже, это может быть работой для XSLT. Можете ли вы привести пример XML, с которым вы имеете дело?   -  person Phil Booth    schedule 22.03.2011
comment
@ user671534: я не понимаю. Хотите, чтобы мы разработали приложение?   -  person    schedule 23.03.2011
comment
Курт, мне кажется, я уже видел немало подобных случаев, но я озадачен вашим комментарием по поводу XForms. Не могли бы вы отредактировать свой вопрос, чтобы привести конкретный пример, иллюстрирующий то, для чего вы стреляете?   -  person avernet    schedule 23.03.2011
comment
хорошо, извините за путаницу с xforms. Существуют инструменты для создания веб-форм для редактирования документов xml, грамматика которых известна, но, конечно, они не являются частью xforms.   -  person user671534    schedule 28.03.2011


Ответы (1)


Вот простая версия в ASP.Net...

Страница будет иметь следующие элементы управления.

<asp:PlaceHolder runat="server" ID="phContainer">  
</asp:PlaceHolder>
<asp:Button runat="server" Text="Save" ID="btnSave" onclick="btnSave_Click" />

Вот код для создания формы, а затем сохранения данных обратно в Xml

public partial class _Default : System.Web.UI.Page
{
    XElement xE;

    protected void Page_Load(object sender, EventArgs e)
    {

        xE = XElement.Parse(@"<Fields>
                                <Field1>Field 1 Data</Field1>
                                <Field2>Field 2 Data</Field2>
                                <Field3>Field 3 Data</Field3>
                            </Fields>");

        foreach (XElement xe in xE.Elements())
        {
            Label lbl = new Label();
            lbl.Text = xe.Name.ToString();
            lbl.Width = 150;
            phContainer.Controls.Add(lbl);

            TextBox tb = new TextBox();
            tb.ID = xe.Name.ToString();
            tb.Text = xe.Value;
            phContainer.Controls.Add(tb);

            phContainer.Controls.Add(new LiteralControl("<br />"));
        }


    }

    protected void btnSave_Click(object sender, EventArgs e)
    {
        foreach (Control c in phContainer.Controls)            
            if (c.GetType() == typeof(TextBox))
                xE.Element(((TextBox)c).ID).Value = ((TextBox)c).Text;


    }
}
person Wes Grant    schedule 23.03.2011
comment
да, что-то в этом роде. Я бы использовал выражения xpath (из файла конфигурации) вместо идентификатора, но идея та же. Я думаю, я задавался вопросом, есть ли структура для этого. ASP.net имеет объект DataSource, который можно использовать с xpath, например. - person user671534; 28.03.2011
comment
Существует XmlDataSource, который вы можете использовать. Вот пример его использования codeproject.com/KB/webforms/XMLDataSource.aspx, который можно изменить для использования элементов управления в ItemTemplate по мере необходимости. - person Wes Grant; 28.03.2011