这两天把加四角号的代码写了一下,我先做了一个取四角号的单机小程序,就是:文本框输入名字—点击查号按钮—显示四角号,调试成功,能正常取号。但是我在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