Forcing XDocument.ToString() to include the closing tag when there is no data

前端 未结 2 1564
萌比男神i
萌比男神i 2021-01-11 11:22

I have a XDocument that looks like this:

 XDocument outputDocument = new XDocument(
                new XElement(\"Document\",
                    new XEleme         


        
相关标签:
2条回答
  • 2021-01-11 11:41

    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;
            }
        }
    
    0 讨论(0)
  • 2021-01-11 11:58

    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);
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题