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

点击:28091

[顶层访客留言] [回复顶层(需要先登录)] [表状] [简明]


文章数: 29
积分: 290
注册时间: 2009/2/7
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 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[点击:28091]
  • 普通文章 _ xietao 2009-03-08 21:48:15 (ID:443) [点击:1262]
  • 普通文章 回复: 加四角号代码问题 xietao 2009-03-08 21:55:57 (ID:444) [点击:1029]
  • 普通文章 谢谢 Harry 2009-03-10 19:17:03 (ID:445) [点击:1470]
  • 普通文章 回复: 谢谢 xietao 2009-03-12 04:27:30 (ID:447) [点击:995]
  • 普通文章 问题已解决 Harry 2009-03-12 13:29:02 (ID:448) [点击:1575]
  •  

    在线用户
    访客访客   访客访客   访客访客   访客访客   访客访客 (我自己)   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
    当前栏目在线用户数 15, 总在线用户数 24