我可以使用XmlSerializer从C#类中获取此XML文件。
<?xml version="1.0" encoding="utf-8"?>
<Component xmlns:spirit="b" xmlns:chrec="a" MovieName="0" BlocksNotCovered="0">
<ClassInfoList>
<chrec:string>hello</chrec:string>
<chrec:string>world</chrec:string>
</ClassInfoList>
<moduleName />
<world>
<x>10</x>
<y>20</y>
</world>
</Component>
如何为chrec和spriti添加前缀命名空间?例如,我如何获取此XML文件?
<?xml version="1.0" encoding="utf-8"?>
<spirit:Component xmlns:spirit="b" xmlns:chrec="a" MovieName="0" BlocksNotCovered="0">
<spirit:ClassInfoList>
<chrec:string>hello</chrec:string>
<chrec:string>world</chrec:string>
</spirit:ClassInfoList>
<spirit:moduleName />
<chrec:world>
<chrec:x>10</chrec:x>
<chrec:y>20</chrec:y>
</chrec:world>
</spirit:Component>
这是C#代码。
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.Linq;
namespace Coverage
{
public class Hello
{
public int x;
public int y;
public Hello()
{
x = 10;
y = 20;
}
}
public class Component {
[XmlAttribute("MovieName")]
public int MovieName;
[XmlAttribute("BlocksNotCovered")]
public int BlocksNotCovered;
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces ns;
public List<string> ClassInfoList;
public string moduleName;
public Hello world;
public Component()
{
ClassInfoList = new List<string>() {"hello", "world"};
MovieName = 0;
BlocksNotCovered = 0;
moduleName = "";
world = new Hello();
}
}
class Cov2xml
{
static void Main(string[] args)
{
string xmlFileName = "perf.xml";
Component report = new Component();
TextWriter writeFileStream = new StreamWriter(xmlFileName);
report.ns = new XmlSerializerNamespaces();
report.ns.Add("chrec","a");
report.ns.Add("spirit","b");
var ser = new XmlSerializer(typeof(Component));
ser.Serialize(writeFileStream, report, report.ns);
writeFileStream.Close();
}
}
}
答案 0 :(得分:2)
这是否链接:
XML Serialization and namespace prefixes
或此链接:
How to generate tag prefixes using XmlSerializer
帮助?
答案 1 :(得分:0)
感谢来自competent_tech的链接,我可以找到实现它的方法。
您可以使用XmlRootAttribute,重要的是名称空间是命名空间,而不是命名空间名称。在示例中,它应该是“b”而不是“chrec”。
[XmlRootAttribute("Component", Namespace="http://namespace", IsNullable = false)]
public class Component {
您可以在变量之前使用XmlElement。
[XmlElement("xyz", Namespace="http://www.namespace", IsNullable = false)]
int x;
你会得到这个。
<?xml version="1.0" encoding="utf-8"?>
<chrec:Component xmlns:spirit="http:..." MovieName="0" BlocksNotCovered="0" xmlns:chrec="...">
<chrec:ClassInfoList>
<chrec:string>hello</chrec:string>
<chrec:string>world</chrec:string>
</chrec:ClassInfoList>
<chrec:moduleName />
<chrec:world>
<spirit:xyz>10</spirit:xyz>
<chrec:y>20</chrec:y>
</chrec:world>
</chrec:Component>