1

複雑な 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 フォームを生成します。

ありがとうカート

4

1 に答える 1

0

これは 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;


    }
}
于 2011-03-23T00:54:15.110 に答える