我想为String创建XMLSchema,
String parameter="<root><HostName>Arasanalu</HostName><AdminUserName>Administrator</AdminUserName>
<AdminPassword>A1234</AdminPassword><PlaceNumber>38</PlaceNumber></root>"
我们可以自动添加更多元素。然后如何创建XMLSchema。
因为我们有上面字符串的静态Schema将是
@"<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
<xs:element name=""root"">
<xs:complexType>
<xs:sequence>
<xs:element name=""HostName"" type=""xs:string"" />
<xs:element name=""AdminUserName"" type=""xs:string"" />
<xs:element name=""AdminPassword"" type=""xs:string"" />
<xs:element name=""PlaceNumber"" type=""xs:positiveInteger"" />
</xs:sequence>
</xs:complexType>
</xs:element></xs:schema>"
如果我在字符串参数中添加更多元素。如何在运行中生成架构?
答案 0 :(得分:0)
您可以尝试使用DataSet
阅读它,编写架构并最后调整一下XML结构。
class Program
{
const string
MinOccurs = "minOccurs",
Element = "element",
LocalName = "xs";
static void Main(string[] args)
{
String parameter =
@"<HostName>Arasanalu</HostName>
<AdminUserName>Administrator</AdminUserName>
<AdminPassword>A1234</AdminPassword>
<PlaceNumber>38</PlaceNumber>";
var ds = new DataSet();
ds.ReadXml(new StringReader("<root>" + parameter + "</root>"));
var sb = new StringBuilder();
using (var w = new StringWriter(sb))
{
ds.WriteXmlSchema(w);
var doc = XDocument.Parse(sb.ToString());
doc.Root.LastNode.Remove();
doc.Root.Attributes()
.Where(a => a.Name.LocalName != LocalName).Remove();
doc.Descendants(XName.Get(Element,
doc.Root.GetNamespaceOfPrefix(LocalName).NamespaceName))
.ToList()
.ForEach(e =>
{
var minOccurs = e.Attribute(XName.Get(MinOccurs));
if (minOccurs != null)
minOccurs.Remove();
});
sb.Clear();
doc.Save(w);
Console.WriteLine(sb.ToString());
}
}
}