I have an XSD file which references other XSD files. It is used by a tomcat application to generate an XML file with water sample results. In MVC application I need to query the database, get rows back, and turn them into an XML document that is formatted by referencing the XSD file. I'm at a point where the only solution I can think of is to have an existing XML file and put tags and load into a string and loop through the string replacing the tags with the row's values.
Is there anything in .NET MVC5 that can do something like this? I am stumped. Below is some relevant pieces.
==========================================
<?xml version="1.0" encoding="UTF-8"?>
<EN:eDWR xmlns:EN="urn:us:net:exchangenetwork"
xmlns:SDWIS="http://www.epa.gov/sdwis"
xmlns:ns3="http://www.epa.gov/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EN:Submission EN:submissionFileCreatedDate="2012-07-21"
EN:submissionFileName="B_14271BJB.csv" EN:submissionID="1">
<EN:LabReport>
<EN:LabIdentification>
<EN:LabAccreditation>
<EN:LabAccreditationIdentifier>OR100024</EN:LabAccreditationIdentifier>
<EN:LabAccreditationAuthorityName>STATE</EN:LabAccreditationAuthorityName>
</EN:LabAccreditation>
</EN:LabIdentification>
<EN:Sample>
<SDWIS:RecordID>155628</SDWIS:RecordID>
<EN:SampleIdentification>
<EN:LabSampleIdentifier>123321</EN:LabSampleIdentifier>
<EN:PWSIdentifier>OR4100237</EN:PWSIdentifier>
<EN:PWSFacilityIdentifier>DIST-A</EN:PWSFacilityIdentifier>
<EN:SampleRuleCode>TC</EN:SampleRuleCode>
<EN:SampleMonitoringTypeCode>RP</EN:SampleMonitoringTypeCode>
===================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Leslie Flagler (SAIC) -->
<xsd:schema targetNamespace="urn:us:net:exchangenetwork" xmlns:SDWIS="http://www.epa.gov/sdwis" xmlns:EN="urn:us:net:exchangenetwork" xmlns:facid="http://www.epa.gov/xml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="3.0">
<xsd:annotation>
<xsd:documentation/>
</xsd:annotation>
<xsd:include schemaLocation="./EDWR_MetaData.xsd"/>
<xsd:include schemaLocation="./EDWR_ContactPoint.xsd"/>
<xsd:include schemaLocation="./SDWIS_LabReport.xsd"/>
<xsd:include schemaLocation="./EDWR_Authentication.xsd"/>
<xsd:element name="eDWR">
<xsd:annotation>
<xsd:documentation>This is the standard regulatory schema
approved by the USEPA and multi-state Lab to State
Drinking Water Integrated Project Team</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>This is enfoTech EDWR schema</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="EN:MetaData" minOccurs="0"/>
<xsd:element ref="EN:Receiver" minOccurs="0"/>
<xsd:element ref="EN:Sender" minOccurs="0"/>
<xsd:element ref="EN:Submission"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="SubmissionDataType">
<xsd:annotation>
<xsd:documentation>Transction information</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="EN:LabReport" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element ref="EN:SubmissionCertification" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="submissionID" type="xsd:string"/>
<xsd:attribute name="submissionFileName" type="xsd:string"/>
<xsd:attribute name="submissionFileCreatedDate" type="xsd:date"/>
</xsd:complexType>
<xsd:element name="MetaData" type="EN:MetaDataDataType">
<xsd:annotation>
<xsd:documentation>General information about the schema</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Receiver" type="EN:ContactPointDataType">
<xsd:annotation>
<xsd:documentation>Regulatory agency and contact to receive
the e-DWR submission file</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Sender" type="EN:ContactPointDataType">
<xsd:annotation>
<xsd:documentation>The sender of the e-DWR submission file</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="LabReport" type="EN:LabReportDataType">
<xsd:annotation>
<xsd:documentation>Lab Analysis Report (includes Lead and
Copper Report, Water Quality Parameters, and
Bacteriological Analysis Report, etc)</xsd:documentation>
<xsd:documentation>Chemical Analysis Report (includes Lead
and Copper Report, Water Quality Parameters, and
Bacteriological Analysis Report)</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="SubmissionCertification" type="EN:AuthenticationDataType">
<xsd:annotation>
<xsd:documentation>Submission Certification</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Submission" type="EN:SubmissionDataType">
<xsd:annotation>
<xsd:documentation>Information pertaining to a drinking
water report submission</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>
This gives exact results. Getting started is tough, the rest is easy.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Xml;
using System.Xml.Linq;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const string FILENAME = @"c:\temp\test.xml";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string identification =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<EN:eDWR" +
" xmlns:EN=\"urn:us:net:exchangenetwork\"" +
" xmlns:SDWIS=\"http://www.epa.gov/sdwis\"" +
" xmlns:ns3=\"http://www.epa.gov/xml\"" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
"/>";
XDocument doc = XDocument.Parse(identification);
XElement eDWR = doc.Elements().Where(x => x.Name.LocalName == "eDWR").FirstOrDefault();
XNamespace EN = eDWR.GetNamespaceOfPrefix("EN");
XNamespace SDWIS = eDWR.GetNamespaceOfPrefix("SDWIS");
XNamespace ns3 = eDWR.GetNamespaceOfPrefix("ns3");
XNamespace xsi = eDWR.GetNamespaceOfPrefix("xsi");
DataTable dt = QueryDataBase();
foreach (DataRow row in dt.AsEnumerable())
{
XElement submission = new XElement(EN + "Submission");
submission.Add(new object[] {
new XAttribute(EN + "submissionFileCreatedDate", row.Field<DateTime>("submissionFileCreatedDate")),
new XAttribute(EN + "submissionFileName", row.Field<string>("submissionFileName")),
new XAttribute(EN + "submissionID", row.Field<int>("submissionID"))
});
eDWR.Add(submission);
XElement LabAccreditation = new XElement(EN + "LabIdentification", new object[] {
new XElement(EN + "LabAccreditationIdentifier", row.Field<string>("LabAccreditationIdentifier")),
new XElement(EN + "LabAccreditationAuthorityName", row.Field<string>("LabAccreditationAuthorityName"))
});
XElement labReport = new XElement(EN + "LabReport");
XElement labIdentification = new XElement(EN + "LabIdentification");
submission.Add(labReport);
labReport.Add(labIdentification);
labIdentification.Add(LabAccreditation);
XElement sampleIdentification = new XElement(EN + "SampleIdentification", new object[] {
new XElement(EN + "LabSampleIdentifier", row.Field<int>("LabSampleIdentifier")),
new XElement(EN + "PWSIdentifier", row.Field<string>("PWSIdentifier")),
new XElement(EN + "PWSFacilityIdentifier", row.Field<string>("PWSFacilityIdentifier")),
new XElement(EN + "SampleRuleCode", row.Field<string>("SampleRuleCode")),
new XElement(EN + "SampleMonitoringTypeCode", row.Field<string>("SampleMonitoringTypeCode"))
});
XElement sample = new XElement(EN + "Sample");
labReport.Add(sample);
XElement RecordID = new XElement(SDWIS + "RecordID", row.Field<int>("RecordID"));
sample.Add(RecordID);
sample.Add(sampleIdentification);
}
doc.Save(FILENAME);
}
public DataTable QueryDataBase()
{
DataTable dt = new DataTable();
//Here is an example of getting a datatable from a database
string SQL = "Enter Your SQL Here";
string connStr = "Enter your database connection string here";
//uncomment instructions below
//SqlDataAdapter adapter = new SqlDataAdapter(SQL, connStr);
//adapter.Fill(dt);
//I will build a dummy datatable for your test case
dt.Columns.Add("submissionFileCreatedDate", typeof(DateTime));
dt.Columns.Add("submissionFileName", typeof(string));
dt.Columns.Add("submissionID", typeof(int));
dt.Columns.Add("LabAccreditationIdentifier", typeof(string));
dt.Columns.Add("LabAccreditationAuthorityName", typeof(string));
dt.Columns.Add("RecordID", typeof(int));
dt.Columns.Add("LabSampleIdentifier", typeof(int));
dt.Columns.Add("PWSIdentifier", typeof(string));
dt.Columns.Add("PWSFacilityIdentifier", typeof(string));
dt.Columns.Add("SampleRuleCode", typeof(string));
dt.Columns.Add("SampleMonitoringTypeCode", typeof(string));
dt.Rows.Add(new object[] {
DateTime.Parse("2012-07-21"),
"B_14271BJB.csv",
1,
"OR100024",
"STATE",
155628,
123321,
"OR4100237",
"DIST-A",
"TC",
"RP"
});
return dt;
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.