我需要能够转换一个包含许多不同默认名称空间的xml文档。进入使用前缀名称空间的文档。
示例xml:
<?xml version="1.0" encoding="utf-8"?>
<agent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name id="0" xmlns="http://test.com">
name1
</name>
<interests xmlns="http://test.com">
<interest xmlns="">
interest1
</interest>
<interest xmlns="">
interest2
</interest>
<interest xmlns="">
interest3
</interest>
<interest xmlns="">
interest4
</interest>
<interest xmlns="">
interest5
</interest>
<ddfsdf xmlns="http://test2.com">
ddfsdf1
</ddfsdf>
</interests>
<foo xmlns="http://test2.com">
foo1
</foo>
</agent>
所需的xml:
<?xml version="1.0" encoding="utf-8"?>
<agent xmlns:test="http://test.com" xmlns:test2="http://test2.com">
<test:name id="1">Fox Mulder</test:name>
<test:interests>
<interest>paranormal</interest>
<interest>aliens</interest>
<test2:ddfsdf>dfsdf</test2:ddfsdf>
</test:interests>
<test2:foo>foo</test2:foo>
</agent>
是否可以在C#中做到这一点?
答案 0 :(得分:0)
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication143
{
class Program
{
const string INPUT_FILENAME = @"c:\temp\test.xml";
const string OUTPUT_FILENAME = @"c:\temp\test1.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(INPUT_FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(Agent));
Agent agent = (Agent)serializer.Deserialize(reader);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(OUTPUT_FILENAME, settings);
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("test","http://test.com");
namespaces.Add("test2","http://test2.com");
serializer.Serialize(writer, agent, namespaces);
}
}
[XmlRoot(ElementName = "agent")]
public class Agent
{
[XmlElement(ElementName = "name", Namespace = "http://test.com")]
public Name name { get; set; }
[XmlElement(ElementName = "interests", Namespace = "http://test.com")]
public Interests interests { get; set; }
[XmlElement(ElementName = "foo", Namespace = "http://test2.com")]
public Foo foo { get; set; }
}
public class Name
{
[XmlAttribute("id")]
public int id { get; set; }
}
public class Interests
{
[XmlElement(ElementName = "ddfsdf", Namespace = "http://test2.com")]
public DDFSDF ddfsdf { get; set; }
[XmlElement(ElementName = "interest", Namespace = "")]
public List<Interest> interest { get; set; }
}
public class Interest
{
[XmlText]
public string text { get; set; }
}
public class DDFSDF
{
[XmlText]
public string text { get; set; }
}
public class Foo
{
[XmlText]
public string text { get; set; }
}
}