SORU
12 HAZİRAN 2009, Cuma


C ile XML tüm ad kaldırmak için nasıl*?

Tüm XML öğeleri namespacees kaldırmak için temiz, şık ve akıllı bir çözüm arıyorum? Nasıl işlevi böyle görünecek?

Arayüzü tanımlanmış:

public interface IXMLUtils
{
        string RemoveAllNamespaces(string xmlDocument);
}

Örnek NS kaldırmak için XML:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfInserts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <insert>
    <offer xmlns="http://schema.peters.com/doc_353/1/Types">0174587</offer>
    <type2 xmlns="http://schema.peters.com/doc_353/1/Types">014717</type2>
    <supplier xmlns="http://schema.peters.com/doc_353/1/Types">019172</supplier>
    <id_frame xmlns="http://schema.peters.com/doc_353/1/Types" />
    <type3 xmlns="http://schema.peters.com/doc_353/1/Types">
      <type2 />
      <main>false</main>
    </type3>
    <status xmlns="http://schema.peters.com/doc_353/1/Types">Some state</status>
  </insert>
</ArrayOfInserts>

RemoveAllNamespaces(xmlWithLotOfNs) diyoruz sonra almalıyız:

  <?xml version="1.0" encoding="utf-16"?>
    <ArrayOfInserts>
      <insert>
        <offer >0174587</offer>
        <type2 >014717</type2>
        <supplier >019172</supplier>
        <id_frame  />
        <type3 >
          <type2 />
          <main>false</main>
        </type3>
        <status >Some state</status>
      </insert>
    </ArrayOfInserts>

Çözümün tercih edilen dil C#.NET 3.5 SP1.

CEVAP
12 HAZİRAN 2009, Cuma


İşte bu da son cevap. Harika Jimmy fikir kullandım ne yazık ki tam kendisi değildir) ve tam özyineleme düzgün çalışması için işlev.

Arayüz:

string RemoveAllNamespaces(string xmlDocument);

Burada en son temiz ve evrensel temsil ediyorum C# XML ad alanları kaldırmak için çözüm:

//Implemented based on interface, not part of algorithm
public static string RemoveAllNamespaces(string xmlDocument)
{
    XElement xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(xmlDocument));

    return xmlDocumentWithoutNs.ToString();
}

//Core recursion function
 private static XElement RemoveAllNamespaces(XElement xmlDocument)
    {
        if (!xmlDocument.HasElements)
        {
            XElement xElement = new XElement(xmlDocument.Name.LocalName);
            xElement.Value = xmlDocument.Value;

            foreach (XAttribute attribute in xmlDocument.Attributes())
                xElement.Add(attribute);

            return xElement;
        }
        return new XElement(xmlDocument.Name.LocalName, xmlDocument.Elements().Select(el => RemoveAllNamespaces(el)));
    }

100%, ama bazı özel durumlarda kapak olmayabilir çok test etmedim çalışıyor ... Ama başlamak için iyi bir başlangıç noktasıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • kremosakhaz

    kremosakhaz

    25 AĞUSTOS 2006
  • PamtheBlamofficial

    PamtheBlamof

    31 Aralık 2010