从 xpath 表达式创建 Web 表单

发布于 2024-10-25 11:39:19 字数 769 浏览 1 评论 0原文

我想构建一个应用程序来编辑复杂 xml 文档中的某些字段。 (ISO19139)。 其想法是识别配置文件中应使用 xpath 表达式编辑的字段并自动生成相应的表单。

因此,应用程序将使用 xpath 从 xml 中提取字段的当前值,将其显示在表单中,并在提交表单时放置新值。

提取和写入值是通过创建、修改和写出 DOM 来完成的,但我想知道你们中是否有人有好的建议,如何自动从 xpath 表达式列表中创建 Web 表单并将表单字段绑定到 xml 字段由 xpath 引用。

有一些工具可以为已知语法的 xml 文档生成 XForms,但它们不是解决方案,因为相应的语法太复杂。

这是一个草图。我们有一个包含个人信息的 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>

应用程序:

将生成一个 Web 表单,其中包含地址和兄弟的文本字段。

谢谢 库尔特

I want to build an application to edit some fields in complex xml documents. (iso19139).
The idea is to identify the fields that should be edited with xpath expressions in a configuration file and to generate the corresponding form automatically.

So, the application would extract the current values of the fields from the xml using xpath, display it in a form and put the new values when the form is submitted.

Extracting and writing the values is done by creating, modifying and writing out the DOM, but I am wondering if any of you has a good suggestion how I can automatically create the webform off the list of xpath expressions and tie the formfields to the xml fields referenced by the xpath.

There are tools to generate XForms for xml documents for which the grammar is known, but they are not a solution as the corresponding grammar is too complex.

Here is a sketch. we have a XML document containing personal info, in which we want to edit the street address and the brother. The xpath expressions in the config file identify the fields that should be editable.

configuration file: (example in xml)

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

application:

would generate a webform with a textfield for the address and the brother.

thanks
Kurt

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦言归人 2024-11-01 11:39:20

这是 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;


    }
}

Here is a simple version in ASP.Net...

The page would have the following controls.

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

Here is the code to build the form and then save the data back to the 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;


    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文