Forcing XDocument.ToString() to include the closing tag when there is no data
I have a XDocument that looks like this:
XDocument outputDocument = new XDocument(
new XElement("Document",
new XElement("Stuff")
)
);
That when I call
outputDocument.ToString()
开发者_如何学JAVAOutputs to this:
<Document>
<Stuff />
</Document>
But I want it to look like this:
<Document>
<Stuff>
</Stuff>
</Document>
I realize the first one is correct, but I am required to output it this way. Any suggestions?
Set the Value
property of each empty XElement
specifically to an empty string.
// Note: This will mutate the specified document.
private static void ForceTags(XDocument document)
{
foreach (XElement childElement in
from x in document.DescendantNodes().OfType<XElement>()
where x.IsEmpty
select x)
{
childElement.Value = string.Empty;
}
}
an issue using the XNode.DeepEquals when there is an empty tags, another way to compare all XML elements from XML documents (this should works even if the XML closing tags are different)
public bool CompareXml()
{
var doc = @"
<ContactPersons>
<ContactPersonRole>General</ContactPersonRole>
<Person>
<Name>Aravind Kumar Eriventy</Name>
<Email/>
<Mobile>9052534488</Mobile>
</Person>
</ContactPersons>";
var doc1 = @"
<ContactPersons>
<ContactPersonRole>General</ContactPersonRole>
<Person>
<Name>Aravind Kumar Eriventy</Name>
<Email></Email>
<Mobile>9052534488</Mobile>
</Person>
</ContactPersons>";
return XmlDocCompare(XDocument.Parse(doc), XDocument.Parse(doc1));
}
private static bool XmlDocCompare(XDocument doc,XDocument doc1)
{
IntroduceClosingBracket(doc.Root);
IntroduceClosingBracket(doc1.Root);
return XNode.DeepEquals(doc1, doc);
}
private static void IntroduceClosingBracket(XElement element)
{
foreach (var descendant in element.DescendantsAndSelf())
{
if (descendant.IsEmpty)
{
descendant.SetValue(String.Empty);
}
}
}
精彩评论