gpt4 book ai didi

c# - C# 中 XmlAttribute 开头的破折号

转载 作者:太空宇宙 更新时间:2023-11-03 21:59:31 25 4
gpt4 key购买 nike

我希望能够做这样的事情:

 //buildArgs
XmlNode buildArgs = doc.CreateElement("buildArgs");
XmlAttribute buildArgsAtt = doc.CreateAttribute("-D:project.rc_file");

但我得到了休闲错误:

An unhandled exception of type 'System.ArgumentException' occurred in System.Xml.dll

Additional information: Invalid name character in '-D'. The '-' character, hexadecimal value 0x2D, cannot be included in a name.

但是我没有选择格式。我正在尝试自动执行将新元素添加到 cruisecontrol.net 配置文件 (ccnet.config) 的过程。所以我需要把破折号放在那里。

这是我的代码:

   //create new instance of XmlDocument
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = false;

//load from file
doc.Load(filename);

//create node and add value
XmlNode projet = doc.CreateNode(XmlNodeType.Element, "projet", null);
XmlAttribute projetAtt = doc.CreateAttribute("name");
projetAtt.Value = projectName + " " + oracleVersion;
projet.Attributes.SetNamedItem(projetAtt);

...

//buildArgs
XmlNode buildArgs = doc.CreateElement("buildArgs");
XmlAttribute buildArgsAtt = doc.CreateAttribute("-D:project.rc_file");
buildArgsAtt.Value = projectName + ".rc";
XmlAttribute buildArgsAtt2 = doc.CreateAttribute("-D:project.svn_trunk_ver");
buildArgsAtt2.Value = trunkNb;
XmlAttribute buildArgsAtt3 = doc.CreateAttribute("-D:project.svn_trunk");
buildArgsAtt3.Value = trunkPath;
buildArgs.Attributes.SetNamedItem(buildArgsAtt);
buildArgs.Attributes.SetNamedItem(buildArgsAtt2);
buildArgs.Attributes.SetNamedItem(buildArgsAtt3);

//add to parent node
projet.AppendChild(nodeWD);
projet.AppendChild(category);
projet.AppendChild(trigger);
trigger.AppendChild(intTrigger);
projet.AppendChild(sourcecontrol);
sourcecontrol.AppendChild(trunkUrl);
sourcecontrol.AppendChild(workingDirectory);
projet.AppendChild(tasks);
tasks.AppendChild(nant);
nant.AppendChild(targetList);
targetList.AppendChild(target);
nant.AppendChild(buildArgs);

//add to elements collection
doc.DocumentElement.AppendChild(projet);

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;
settings.Encoding = Encoding.UTF8;

using (XmlWriter writer = XmlTextWriter.Create(filename, settings))
{
doc.Save(writer);
}

我检查了这个:Using - in XML element name和其他人,但我没有找到我可以使用的答案。

-编辑-

这是 ccnet.config 的一个例子: http://ccnet.sourceforge.net/CCNET/Configuring%20the%20Server.html

谢谢!

最佳答案

你根本做不到,那不是一个有效的属性名。不过,您可以将其存储为属性值 - 只需使用 XML 允许的名称即可。

我很确定 CruiseControl.Net 也没有这样做,因为它无法在此类文件上使用内置解析器。

编辑:它是元素值(也称为内容)。设置如下:

var buildArgs = doc.CreateElement("buildArgs");
buildArgs.Value = "-D:project.rc_file";

关于c# - C# 中 XmlAttribute 开头的破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com