none
有个问题请教了多处都没有结果,还请各位微哥帮忙看看 RRS feed

  • 问题

  • 有一个xml文件,内容如下

    <notice>

         大家好,我的名字加<name key="userName" />,来自<from key="userFrom"/>,今年<age key="userAge"/>岁.

    </notice>

    现在有个Dictionary 对象,数据结构为:{"userName":"张三","userFrom":"中国","userAge":"33"}

    现在我希望 用此xml作模板,用此Dictionary 对象做数据填充该模板,生成字符串如:" 大家好,我的名字加张三,来自中国,今年33岁",

    这样需求应该怎么实现?麻烦各位帮我看看,谢谢啦!

    2013年1月7日 8:52

答案

  • 楼主,不妨尝试这个:

        public class MainTest
        {
            static void Main(string[] args)
            {
                Dictionary<stringstring> keyValues = new Dictionary<stringstring>();
                keyValues.Add("userName""张三");
                keyValues.Add("userFrom""上海");
                keyValues.Add("userAge""26");
     
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                
                //取出全部的部分
                string all = doc.DocumentElement.InnerXml;
                //正则表达式找出xml部分,做匹配:
                Regex reg = new Regex("(?<=([\u2E80-\u9FFF|[,]]*)).*?(?=([\u2E80-\u9FFF|[,]]*?))");
                
                //取出后先移除空格
               all= reg.Replace(allnew MatchEvaluator((m=> 
                {
                    string value = m.Value.Trim();
                    //动态构成一个完整xml
                    if (value != "")
                    {
                        string tvalue = "<x>" + value + "</x>";
                        XDocument tdoc = XDocument.Parse(tvalue);
                        string key = (tdoc.Root.FirstNode as XElement).Attribute("key").Value;
                        if (keyValues.ContainsKey(key))
                        {
                            return keyValues[key];
                        }
                    }
                    return string.Empty;
                }));
     
                Console.WriteLine(all);
            }
        }

    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    • 已标记为答案 杨汉亮 2013年1月8日 13:54
    2013年1月8日 2:42

全部回复

  • public class user{public string userName{get;set;} public string userFrom{get;set;} public int userAge{get;set}}

    用json反序列化 :{"userName":"张三","userFrom":"中国","userAge":"33"} 为 Dictionary<string,user> 类型。

    然后通过反序列化的结构化数据来填写你的文件。

    你提供的那个xml文件格式不对。

    2013年1月7日 9:12
  • 哦,不是这样的 我只是用 json来表示下我Dictionory对象的数据结构(key-value),现在的问题是怎么填充,谢谢
    2013年1月7日 9:31
  • 哦,不是这样的 我只是用 json来表示下我Dictionory对象的数据结构(key-value),现在的问题是怎么填充,谢谢

    你确定你生成的文件是这样吗?

    通过模板:

    <notice>

         大家好,我的名字加<name key="userName" />,来自<from key="userFrom"/>,今年<age key="userAge"/>岁.

    </notice>

    填充数据 :{"userName":"张三","userFrom":"中国","userAge":"33"}

    后为:

    <notice>

         大家好,我的名字加张三,来自中国,今年33岁.

    </notice>

    2013年1月7日 9:43
  • 我是用一个Dictionary对象填充该模板,该Dictionary对象有三个key 分别为:userName,userFrom,userAge,对应的值分别为张三,中国,33,

    我应该如何填充该xml生成 最后需要的字符串?

    2013年1月7日 9:48
  • 我是用一个Dictionary对象填充该模板,该Dictionary对象有三个key 分别为:userName,userFrom,userAge,对应的值分别为张三,中国,33,

    我应该如何填充该xml生成 最后需要的字符串?


    string str = string.Format("<notice>大家好,我的名字加{0},来自{1},今年{2}岁.</notice>",dict["userName"],dict["userFrom"],dict["userAge"]);
    2013年1月7日 9:51
  • 这是修改了模板的定义了,如果我希望保留模板的定义使用 <name key="userName" />,<from key="userFrom"/>,<age key="userAge"/>呢?

    因为我 name 节点中可能还会嵌套一个子节点 如:<alias />等,如表示个别名之类的  ....我的名字叫张三,外号小张....,如果没有子节点则直接.....我的名字叫张三,......

    2013年1月7日 9:58
  • 这是修改了模板的定义了,如果我希望保留模板的定义使用 <name key="userName" />,<from key="userFrom"/>,<age key="userAge"/>呢?

    因为我 name 节点中可能还会嵌套一个子节点 如:<alias />等,如表示个别名之类的  ....我的名字叫张三,外号小张....,如果没有子节点则直接.....我的名字叫张三,......

    请你把你的需求一次性的描述清楚。我想知道输入是什么,输出是什么。

    看你的提问,你说有个模板 :

    <notice>

         大家好,我的名字加<name key="userName" />,来自<from key="userFrom"/>,今年<age key="userAge"/>岁.

    </notice>

    然后又要生成一个字符串:

    大家好,我的名字加张三,来自中国,今年33岁

    请问这跟你的模板有啥关联么?

    • 已编辑 Skyseer 2013年1月7日 10:06
    2013年1月7日 10:03
  • 楼主,不妨尝试这个:

        public class MainTest
        {
            static void Main(string[] args)
            {
                Dictionary<stringstring> keyValues = new Dictionary<stringstring>();
                keyValues.Add("userName""张三");
                keyValues.Add("userFrom""上海");
                keyValues.Add("userAge""26");
     
                XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                
                //取出全部的部分
                string all = doc.DocumentElement.InnerXml;
                //正则表达式找出xml部分,做匹配:
                Regex reg = new Regex("(?<=([\u2E80-\u9FFF|[,]]*)).*?(?=([\u2E80-\u9FFF|[,]]*?))");
                
                //取出后先移除空格
               all= reg.Replace(allnew MatchEvaluator((m=> 
                {
                    string value = m.Value.Trim();
                    //动态构成一个完整xml
                    if (value != "")
                    {
                        string tvalue = "<x>" + value + "</x>";
                        XDocument tdoc = XDocument.Parse(tvalue);
                        string key = (tdoc.Root.FirstNode as XElement).Attribute("key").Value;
                        if (keyValues.ContainsKey(key))
                        {
                            return keyValues[key];
                        }
                    }
                    return string.Empty;
                }));
     
                Console.WriteLine(all);
            }
        }

    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    • 已标记为答案 杨汉亮 2013年1月8日 13:54
    2013年1月8日 2:42