欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 产品与服务 / 文章 442

点击:29024

[顶层访客留言] [回复顶层(需要先登录)] [表状] [详细]
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 442
加四角号代码问题

作者: Harry


这两天把加四角号的代码写了一下,我先做了一个取四角号的单机小程序,就是:文本框输入名字—点击查号按钮—显示四角号,调试成功,能正常取号。但是我在dp2catalog_marc_autogen.cs里面加入相关代码,并进行了必要的修改后,程序出错。

我的程序是这样的:

先在相关位置加入:

using System.Xml;
using System.Xml.XPath;

再在相关位置加入:

actions.NewItem("905字段加四角号", "905字段加加四角号", "AddFourAngle", false);

再在相关位置加入:

 void AddFourAngle()
        {
            string sijiaohao = "";
            string author = "";
            string author1 = "";
            string author2 = "";
            author1 = this.DetailForm.MarcEditor.Record.Fields.GetFirstSubfield("701", "a");
            author2 = this.DetailForm.MarcEditor.Record.Fields.GetFirstSubfield("711", "a");
            getSiJiaoHao getsjh = new getSiJiaoHao();
            if (author1 != "")
            {

                author = author1;
                if (author.Length == 1)
                {
                    getsjh.authorchar = author[0];
                    getsjh.QuHao();
                    sijiaohao = getsjh.hao;     //1个字,取号规则:1234
                }
                if (author.Length == 2)
                {
                    for (int i = 0; i <= 1; i++)
                    {
                        getsjh.authorchar = author[i];
                        getsjh.QuHao();
                        if (i == 0)
                            sijiaohao = getsjh.hao.Substring(0, 1) + getsjh.hao.Substring(3, 1);    //两个字,取号规则:1414
                        if (i == 1)
                            sijiaohao += getsjh.hao.Substring(0, 1) + getsjh.hao.Substring(3, 1);
                    }
                }
                if (author.Length >= 3)
                {
                    author = author.Substring(0, 3);
                    for (int i = 0; i <= 2; i++)
                    {
                        getsjh.authorchar = author[i];
                        getsjh.QuHao();
                        if (i == 0)
                            sijiaohao = getsjh.hao.Substring(0, 1) + getsjh.hao.Substring(3, 1);    //大于等于3个字,只取前3个字,取号规则:1411
                        if (i == 1)
                            sijiaohao += getsjh.hao.Substring(0, 1);
                        if (i == 2)
                            sijiaohao += getsjh.hao.Substring(0, 1);
                    }
                }
            }
            else if (author2 != "")
            {
                if (author2.Length < 4)
                {
                    MessageBox.Show(this.DetailForm, "团体责任者这么短,取号规则研究中...");
                    return;
                }
                else
                {
                    author = author2.Substring(0, 3);
                    for (int i = 0; i <= 3; i++)
                    {
                        getsjh.authorchar = author[i];
                        getsjh.QuHao();
                        if (i == 0)
                            sijiaohao = getsjh.hao.Substring(0, 1);    //团体只取前四个字,取号规则:1111
                        if (i == 1)
                            sijiaohao += getsjh.hao.Substring(0, 1);
                        if (i == 2)
                            sijiaohao += getsjh.hao.Substring(0, 1);
                        if (i == 3)
                            sijiaohao += getsjh.hao.Substring(0, 1);
                    }
                }
            }
            else
            {
                MessageBox.Show(this.DetailForm, "701/711中均未发现$a,无法处理");
                return;
             }
            this.DetailForm.MarcEditor.Record.Fields.SetFirstSubfield("905", "e", sijiaohao);
        }

最后,在代码的最后加入:

    class getSiJiaoHao
    {
        public string hao;
        public char authorchar;
        public void QuHao()
        {
            XPathDocument doc = new XPathDocument("sijiaohao.xml");
            XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();
            XPathNodeIterator iter = nav.Select("/Collection/Character[@char='" + authorchar + "']");
            while (iter.MoveNext())
            {
                hao = iter.Current.Value;
            }
        }
    }

并且将sijiaohao.xml拷贝到相关目录下。

Ctrl+A 选择“905字段加四角号”后发生如下错误。

 

我尝试把所有代码都套入namespace dp2script,也不行,还是同样的错误。

麻烦老师帮我看一下,我的程序写得还是很工整,看了应该不会害眼,呵呵。

另外,关于我的取号小程序,我是通过在项目上添加新建项— xml文件添加并编写了sijiaohao.xml,并将其属性更改为“如果较新则复制”,在本机调试没有问题。但是发布到localhost后,再安装,运行程序出错,说是找不到...sijiaohao.xml,我把sijiaohao.xml拷贝到相关路径下,程序就正常了,请问老师这是什么问题啊?我用的编辑环境是 Visual C# 2008。

以下是我在autogen代码和取号小程序中用到的sijiaohao.xml(比较完整的四角号码表,也很准确)

sijiaohao.xml



发表时间: 2009-03-08 18:55:43
最后修改时间: 2009-03-08 19:10:58
  • 普通文章 加四角号代码问题 Harry 2009-03-08 18:55:43[点击:29024]
  • 普通文章 _ xietao 2009-03-08 21:48:15 (ID:443) [点击:1306]
  • 普通文章 回复: 加四角号代码问题 xietao 2009-03-08 21:55:57 (ID:444) [点击:1072]
  • 普通文章 谢谢 Harry 2009-03-10 19:17:03 (ID:445) [点击:1539]
  • 普通文章 回复: 谢谢 xietao 2009-03-12 04:27:30 (ID:447) [点击:1037]
  • 普通文章 问题已解决 Harry 2009-03-12 13:29:02 (ID:448) [点击:1635]
  •  

    在线用户
    访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
    当前栏目在线用户数 146, 总在线用户数 171