Pom*_*ter 4 c# xml string converter
我想在C#中编写一些带有Xml并将其转换为纯文本的东西.
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Run Code Online (Sandbox Code Playgroud)
会成为:
To Tove
From Jani
Heading Reminder
Body don't forget me this weekend!
Run Code Online (Sandbox Code Playgroud)
有没有这样的事情?我该怎么做呢?
这只是粗暴的想法,我仍然需要大量的工作:
private void dataGridViewResult_SelectionChanged(object sender, EventArgs e)
{
if (this.dataGridViewResult.SelectedRows.Count > 0)
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("SQL"); //.xml
xslt.Transform("SQL","SQL"); //.xml, .html
this.richTextBoxSQL.Text = this.dataGridViewResult.SelectedRows[0].Cells["SQL"].Value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
以下XSLT脚本将执行您想要的操作:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="*">
<xsl:for-each select="*">
<xsl:value-of select="local-name()"/>
<xsl:text> </xsl:text>
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
然后您可以使用XslCompiledTransform类来应用脚本:
private string transformXml(string sourceXmlText, string xsltText)
{
XmlDocument sourceXmlDocument = new XmlDocument();
sourceXmlDocument.LoadXml(sourceXmlText);
XslCompiledTransform transformer = new XslCompiledTransform();
XmlTextReader xsltReader = new XmlTextReader(new StringReader(xsltText));
transformer.Load(xsltReader);
MemoryStream outputStream = new MemoryStream();
XmlWriter xmlWriter = XmlWriter.Create(outputStream, transformer.OutputSettings);
transformer.Transform(sourceXmlDocument, null, xmlWriter);
outputStream.Position = 0;
StreamReader streamReader = new StreamReader(outputStream);
return streamReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
它显然比人们发布的其他解决方案更复杂,但它的主要优点是,如果您需要更改格式,可以轻松更改脚本.
像这样的东西:
XmlDocument doc = new XmlDocument();
doc.LoadXml(your text string);
StringBuilder sb = new StringBuilder();
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
sb.Append(char.ToUpper(node.Name[0]));
sb.Append(node.Name.Substring(1));
sb.Append(' ');
sb.AppendLine(node.InnerText);
}
Console.WriteLine(sb);
Run Code Online (Sandbox Code Playgroud)