• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 418
  • Last Modified:

XML Formatting

Is there any way to add line breaks to an XML file after each element using XSLT or C#?

The problem is I have multiple files (several hundred thousand) that were all exported into XML as a single line. For the input program to accept them, they have to include line breaks to be more properly formatted. Any ideas on how to accomplish this?


Before
 
<document xmlns="http://www.ademero.com/XmlSchemas/ContentCentral/XmlCaptureDescriptorV1.1" xmlns:addData="http://www.abbyy.com/FlexiCapture/Schemas/Export/AdditionalFormData.xsd" xmlns:form="http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd"><electronicFile>Images\AIRCO-W8371_1.pdf</electronicFile><destination><catalog documentType="default">Accounts Payable</catalog></destination><fields><field name="Invoice">W8371</field><field name="Vendor">AIRCO INC</field><field name="Date">12/18/98</field></fields></document>
 
 
AFTER
 
<document xmlns="http://www.ademero.com/XmlSchemas/ContentCentral/XmlCaptureDescriptorV1.1" xmlns:addData="http://www.abbyy.com/FlexiCapture/Schemas/Export/AdditionalFormData.xsd" xmlns:form="http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd">
  <electronicFile>Images\AIRCO-W8371_1.pdf</electronicFile>
  <destination>
    <catalog documentType="default">Accounts Payable</catalog>
  </destination>
  <fields>
    <field name="Invoice">W8371</field>
    <field name="Vendor">AIRCO INC</field>
    <field name="Date">12/18/98</field>
  </fields>
</document>

Open in new window

0
developernetwork
Asked:
developernetwork
2 Solutions
 
zc2Commented:
Try to use an identity transformation, it should output with line breaks, especially if you use <xsl:output> with the indent="yes" attribute
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes" encoding="iso-8859-1"/>
 
	<xsl:template match="@*|node()">
	  <xsl:copy>
	    <xsl:apply-templates select="@*|node()"/>
	  </xsl:copy>
	</xsl:template>	
</xsl:stylesheet>

Open in new window

0
 
developernetworkAuthor Commented:
I'm a little confused.

Here, let me show you the XSLT stylesheet we're already using.
I have the indent="yes" in there and it fails to do that.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes" media-type="text/xml" omit-xml-declaration="no" version="1.0"/>
	<xsl:template match="/" xmlns:addData="http://www.abbyy.com/FlexiCapture/Schemas/Export/AdditionalFormData.xsd"
	xmlns:form="http://www.abbyy.com/FlexiCapture/Schemas/Export/FormData.xsd">
		<document xmlns="http://www.ademero.com/XmlSchemas/ContentCentral/XmlCaptureDescriptorV1.1">
			<electronicFile>
				<xsl:value-of select="form:Documents/*/@addData:ImagePath" />
			</electronicFile>
			<destination>
				<catalog documentType="default">Accounts Payable</catalog>
			</destination>
			<fields>
				<field name="Invoice">
					<xsl:value-of select="form:Documents/*/_Document/_Invoice" />
				</field>
				<field name="Vendor">
					<xsl:value-of select="form:Documents/*/_Document/_Vendor" />
				</field>
				<field name="Date">
					<xsl:value-of select="form:Documents/*/_Document/_Date" />
				</field>
			</fields>
		</document>
	</xsl:template>
</xsl:stylesheet>

Open in new window

0
 
zc2Commented:
May I ask you what the xsl processor are you using?
I tried on MSXML v3 and v6, it does obey the indent attribute.
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
developernetworkAuthor Commented:
I'm using a simple Xsl.Transform command in Microsoft C# version 3.5
0
 
developernetworkAuthor Commented:
I'm not familiar with how to use MSXML v6, I've just written a little program in C# that does the transform.
0
 
developernetworkAuthor Commented:
Did you make changes to the XSLT that I posted to make it do that? I'm trying again and I'm just not able to get it to format the document. I'm extremely new to working with XML, and they've put me on a very short deadline, so I haven't had the chance to read a lot of what I would have if I had been granted more time on this project.
0
 
zc2Commented:
You don't need a complex xslt to just reformat the xml with the same structure it already has.
All you need is a copy xslt which I have provided you in the first comment.

I tried to use the xsl from a C# program, and you right it does ignore the indent="yes" attribute.

Try to use the copy xsl with the following command line utility, it uses MSXML v3 as far as I know.
http://www.microsoft.com/downloads/details.aspx?FamilyID=2fb55371-c94e-4373-b0e9-db4816552e41&DisplayLang=en
0
 
developernetworkAuthor Commented:
Well, this isn't the original document. The XSLT transforms it from a different document.

The reason I use the C# tool is because I have to execute this on a couple hundred thousand documents.
0
 
Hans LangerCommented:
Just load the XML on a XML object and then save it or call his outerxml property. Both method ident the data.

xml.xmlDocument oXML = new xml.xmldocument;
oXML.loadxml(sXML)


oXML.outterXML

or

oXML.save("c:\myfile.xml")
0
 
Tony McCreathTechnical SEO ConsultantCommented:
This might help...
xmlNode = the xml data
 
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 4;
xmlWriter.IndentChar = ' ';
xmlWriter.QuoteChar = '"';
 
xmlNode.WriteTo(xmlWriter);
 
return stringWriter.ToString();

Open in new window

0
 
developernetworkAuthor Commented:
Thanks, using all of this I was able to design a working solution. I appreciate it!
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now