0

devanagriからitransへのマッピングを持つ2つのxmlファイルがあります。これらのファイルはdev.xmlとgujarati.xmlです。xmlファイルの内容は次のとおりです。

guj.xmlの場合は次のとおりです。

<mapping>
  <character>અ&lt;/character>
  <itrans>a</itrans>
</mapping>

dev.xmlの場合は

<mapping>
    <character>अ&lt;/character>
    <itrans>a</itrans>
</mapping>

次のコードを持つglobal.asaxファイルがあります。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Xml.Linq;
using System.Xml;

namespace finAL
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            sbyte[,] d = new sbyte[100, 100];
            sbyte[,] g = new sbyte[100, 100];
            int count = 0;
            int j = 0;

            XmlDocument docA = new XmlDocument();
            StreamReader sr = new StreamReader("dev.xml");
            docA.Load(sr);

            XmlDocument docB = new XmlDocument();
            StreamReader sr1 = new StreamReader("guj.xml");
            docB.Load(sr1);

            XmlNodeList elemlist1 = root.GetElementsByTagName("mapping");
            XmlNodeList elemlist2 = root.GetElementsByTagName("mapping");
            XmlNodeList X;

            for (int i = 0; i < elemlist1.Count; i++)
            {
                X = elemlist1[i].GetElementsByTagName("itrans");
                d[i][0] = X[0].firstchild.data;


                X = elemlist1[i].GetElementsByTagName("character");
                d[i][1] = X[0].firstchild.data;
            }

            for (int i = 0; i < elemlist2.Count; i++)
            {
                X = elemlist1[i].GetElementsByTagName("itrans");
                g[i][0] = X[0].firstchild.data;

                X = elemlist1[i].GetElementsByTagName("character");
                g[i][1] = X[0].firstchild.data;
            }

            Session("dtable") = d;
            Session("gtable") = g;
        }
    }
}

ここでのコードは、両方のxmlファイルから読み取り、文字を2次元配列に格納します。この配列は、default.aspxでアクセスできるように、セッション変数にさらに格納されます。

default.aspxファイルには次のコードが含まれています。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;

namespace finAL
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            sbyte[,] TableD = new sbyte[100, 100];
            sbyte[,] TableG = new sbyte[100, 100];
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<div>" & Request.Form("inTransContent")   & "</div>");
            XmlNodeList nodeList;
            nodeList = doc.DocumentElement.SelectNodes("//text()");
            TableD = Session("dtable");
            TableG = Session("gtable");
            String str=tmpNode.data;
            str.ToCharArray();
            foreach (XmlText tmpNode in nodeList)
            {

            }
            Response.Write(doc.DocumentElement.InnerXml);
        }
    }
}

ここで、intranscontentには、div要素を持つWebページが含まれています。だから私はそれらからテキストノードを選択します。このコードでは、global.asaxにあったセッション変数にアクセスしているため、ノードは文字列に変換されてからchararrayに変換され、devanagriの文字をグジャラート語に置き換えることができます。

forループでは、すべての音訳規則を念頭に置いて、すべてのdevanagri文字と同等のグジャラート語文字をチェックする必要があります。音訳規則は、前の文字が母音の場合、母音のみを出力する必要があるようなものです。誰かがこのforループを手伝ってくれるなら、私は彼らに感謝するでしょう。ありがとう!質問は自由に投稿できます。

4

1 に答える 1

0

本当にデーヴァナグリ文字とグジャラート文字の間のitrans一意の識別子であるとは思えませんがDictionary<char,char>、配列の代わりに a を作成することをお勧めします。

var gujarati = "<mappings><mapping><character>અ&lt;/character><itrans>a</itrans></mapping><mapping><character>ત&lt;/character><itrans>i</itrans></mapping></mappings>";
var devanagri = "<mappings><mapping><character>अ&lt;/character><itrans>a</itrans></mapping><mapping><character>र&lt;/character><itrans>i</itrans></mapping></mappings>";

var gujDict = XDocument.Parse(gujarati).
                Descendants("mapping").
                ToDictionary(ele => ele.Element("itrans").Value[0], ele => ele.Element("character").Value[0]);
var devDict = XDocument.Parse(devanagri).
                Descendants("mapping").
                ToDictionary(ele => ele.Element("itrans").Value[0], ele => ele.Element("character").Value[0]);

var devToGuj = new Dictionary<char, char>();

foreach (var c in devDict) 
{
    char dev;
    if (gujDict.TryGetValue(c.Key, out dev))
        devToGuj.Add(c.Value, dev);
}

次にdevToGuj['અ']、対応する文字を取得するだけです。文字列内の文字を置き換えるには、次のようにすることができます。

var devText = "अ quरck test.";
var gujText = String.Join("", 
                    devText.ToArray().
                    Select(c => devToGuj.ContainsKey(c) ? devToGuj[c] : c)
                    );

=>「ちょっとテスト。」

于 2011-03-22T12:35:00.290 に答える