使用xds.exe(或其他方法)从类生成XSD文件效果很好,但是我找不到将文档(或任何类型的描述)插入输出XSD的方法。
例如,C#类
public class Animal
{
public int NumberOfLegs;
}
Run Code Online (Sandbox Code Playgroud)
生成XSD
<?xml version="1.0" encoding="utf-16"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Animal" nillable="true" type="Animal" />
<xs:complexType name="Animal">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="NumberOfLegs" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
但是我希望能够将XSD注释作为元数据添加到类中,因此XSD可以作为
<xs:complexType name="Animal">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="NumberOfLegs" type="xs:int">
<xs:annotation>
<xs:documentation>Will need to be greater than 0 to walk!</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)
在C#代码中是否有任何简洁的方法可以实现此目的?将任何种类的描述添加到xml元素/属性的任何方式都可以。批注必须在实际代码旁边,如下所示:
public class Animal
{
[XmlAnnotation("Will need to be greater than 0 to walk!")]
public int NumberOfLegs;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,需要从注释中自动记录下来。
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication49
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
StreamReader reader = new StreamReader(FILENAME);
reader.ReadLine(); //skip the xml identification with utf-16 encoding
XDocument doc = XDocument.Load(reader);
XElement firstNode = (XElement)doc.FirstNode;
XNamespace nsXs = firstNode.GetNamespaceOfPrefix("xs");
XElement sequence = doc.Descendants(nsXs + "element").FirstOrDefault();
sequence.Add(new XElement(nsXs + "annotation",
new XElement(nsXs + "documention", "Will need to be greater than 0 to walk!")
));
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |