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

  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009
  • LavcoPriceTech

    LavcoPriceTe

    21 AĞUSTOS 2010
  • LiquidMusick

    LiquidMusick

    23 Aralık 2010