Domanda

Ho due file XML che hanno Devanagri alla mappatura ITRANS, questi file sono dev.xml e gujarati.xml.Il contenuto del file xml è il seguente:

per guj.xml è:

<mapping>
  <character>અ</character>
  <itrans>a</itrans>
</mapping>

e per dev.xml lo è

<mapping>
    <character>अ</character>
    <itrans>a</itrans>
</mapping>

Ho un file global.asax che ha il seguente codice:

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;
        }
    }
}

Il codice qui legge da entrambi i file xml e memorizza i caratteri in un array bidimensionale.Questo array viene ulteriormente memorizzato in una variabile di sessione in modo che io possa accedervi in ​​default.aspx

Il file default.aspx contiene il codice seguente.

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);
        }
    }
}

qui l'intranscontent contiene la pagina web con l'elemento div.quindi seleziono i textnodes da loro.In questo codice accedo alla variabile di sessione che era nel global.asax i nodi vengono convertiti in stringhe e quindi in chaarray in modo da poter sostituire i caratteri di devanagri in gujarati.

Nel ciclo for devo controllare per ogni carattere devanagri un carattere gujarati equivalente tenendo presente tutte le regole di traslitterazione. Le regole di traslitterazione sono come se il carattere precedente fosse vocale, dovrebbe emettere solo vocale.Se qualcuno potesse aiutarmi con questo ciclo for gli sarò grato.Grazie!qualsiasi domanda è libera di postare.

È stato utile?

Soluzione

Se la itrans sono davvero un identificatore univoco, di cui dubito, tra i caratteri Devanagri e Gujarati, quindi consiglierei di crearne uno Dictionary<char,char> invece di un array.

var gujarati = "<mappings><mapping><character>અ</character><itrans>a</itrans></mapping><mapping><character>ત</character><itrans>i</itrans></mapping></mappings>";
var devanagri = "<mappings><mapping><character>अ</character><itrans>a</itrans></mapping><mapping><character>र</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);
}

Allora semplicemente devToGuj['અ'] per ottenere il carattere corrispondente.Per sostituire i caratteri in una stringa potresti fare qualcosa del genere.

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

=> "Test rapido."

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top