将我的 XML 模式输出到 HTML
Output my XML schema to HTML
我有一个架构生成器,它使用 XmlSchema 来构建一个基于 EF 模型的 xml。
我的问题是,我想 return 以人类可读格式显示 XML 模式,以便我可以 HTML 将其显示给最终用户。
我试过使用 toString(),但这不起作用。 return 我的 XMLSchema 的最佳方式是什么?
xml 格式正确,我想我只是不知道如何 return 它到前端,所以我可以将它包装在突出显示
代码如下:
public ActionResult ResourceXML(int id)
{
Resource res = db.Resources.Find(id);
res.Properties = db.ResourceProperties.Where(c => c.ResourceId == id).ToList();
XmlSchema schema = new XmlSchema();
XmlSchemaElement resource = new XmlSchemaElement();
schema.Namespaces.Add("hrr", "http://schema.hrr.com/hrr");
schema.Namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
schema.TargetNamespace = "http://www.w3schools.com";
resource.Name = res.Name;
resource.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");
resource.Id = ""+res.Id;
//annotation
XmlSchemaAnnotation resourceAnno = new XmlSchemaAnnotation();
resource.Annotation = resourceAnno;
//documentation
XmlSchemaDocumentation docs = new XmlSchemaDocumentation();
resourceAnno.Items.Add(docs);
docs.Markup = TextToNodeArray(""+res.Description);
//complex type
XmlSchemaComplexType complexType = new XmlSchemaComplexType();
//sequence
XmlSchemaSequence sequence = new XmlSchemaSequence();
complexType.Particle = sequence;
foreach (var property in res.Properties)
{
XmlSchemaElement element = new XmlSchemaElement();
element.Name = property.Name;
element.SchemaTypeName = new XmlQualifiedName(GetTheType(property), "http://www.w3.org/2001/XMLSchema");
element.Id = property.Id+"";
if (property.Required)
{
element.MinOccurs = 1;
}
else
{
element.MinOccurs = 0;
}
if (property.List)
{
element.MaxOccursString = "unbounded";
}
else
{
element.MaxOccursString = "1";
}
//annotation
XmlSchemaAnnotation elemAnno = new XmlSchemaAnnotation();
element.Annotation = elemAnno;
//documentation
XmlSchemaDocumentation elemDoc = new XmlSchemaDocumentation();
resourceAnno.Items.Add(elemDoc);
//No property data
elemDoc.Markup = TextToNodeArray("");
sequence.Items.Add(element);
}
schema.Items.Add(resource);
schema.Version = "" + res.Version.Number;
//schema.Write(stream:);
return File(stream, "text/xml");
}
您需要将其写入流和 return 流。
例如,
MemoryStream ms = new MemoryStream();
schema.Write(ms);
ms.Flush();
return new FileStreamResult(ms, "text/xml");
我有一个架构生成器,它使用 XmlSchema 来构建一个基于 EF 模型的 xml。
我的问题是,我想 return 以人类可读格式显示 XML 模式,以便我可以 HTML 将其显示给最终用户。
我试过使用 toString(),但这不起作用。 return 我的 XMLSchema 的最佳方式是什么?
xml 格式正确,我想我只是不知道如何 return 它到前端,所以我可以将它包装在突出显示
代码如下:
public ActionResult ResourceXML(int id)
{
Resource res = db.Resources.Find(id);
res.Properties = db.ResourceProperties.Where(c => c.ResourceId == id).ToList();
XmlSchema schema = new XmlSchema();
XmlSchemaElement resource = new XmlSchemaElement();
schema.Namespaces.Add("hrr", "http://schema.hrr.com/hrr");
schema.Namespaces.Add("xs", "http://www.w3.org/2001/XMLSchema");
schema.TargetNamespace = "http://www.w3schools.com";
resource.Name = res.Name;
resource.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");
resource.Id = ""+res.Id;
//annotation
XmlSchemaAnnotation resourceAnno = new XmlSchemaAnnotation();
resource.Annotation = resourceAnno;
//documentation
XmlSchemaDocumentation docs = new XmlSchemaDocumentation();
resourceAnno.Items.Add(docs);
docs.Markup = TextToNodeArray(""+res.Description);
//complex type
XmlSchemaComplexType complexType = new XmlSchemaComplexType();
//sequence
XmlSchemaSequence sequence = new XmlSchemaSequence();
complexType.Particle = sequence;
foreach (var property in res.Properties)
{
XmlSchemaElement element = new XmlSchemaElement();
element.Name = property.Name;
element.SchemaTypeName = new XmlQualifiedName(GetTheType(property), "http://www.w3.org/2001/XMLSchema");
element.Id = property.Id+"";
if (property.Required)
{
element.MinOccurs = 1;
}
else
{
element.MinOccurs = 0;
}
if (property.List)
{
element.MaxOccursString = "unbounded";
}
else
{
element.MaxOccursString = "1";
}
//annotation
XmlSchemaAnnotation elemAnno = new XmlSchemaAnnotation();
element.Annotation = elemAnno;
//documentation
XmlSchemaDocumentation elemDoc = new XmlSchemaDocumentation();
resourceAnno.Items.Add(elemDoc);
//No property data
elemDoc.Markup = TextToNodeArray("");
sequence.Items.Add(element);
}
schema.Items.Add(resource);
schema.Version = "" + res.Version.Number;
//schema.Write(stream:);
return File(stream, "text/xml");
}
您需要将其写入流和 return 流。
例如,
MemoryStream ms = new MemoryStream();
schema.Write(ms);
ms.Flush();
return new FileStreamResult(ms, "text/xml");