Question

Comment supprimer le " xmlns: ... " Informations sur les espaces de noms de chaque élément XML en C #?

Était-ce utile?

La solution

Malgré la mise en garde de Zombiesheep, ma solution consiste à laver le code XML avec une transformation xslt pour le faire.

wash.xsl:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="no" encoding="UTF-8"/>

  <xsl:template match="/|comment()|processing-instruction()">
    <xsl:copy>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{local-name()}">
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>

  <xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>

</xsl:stylesheet>

Autres conseils

À partir d'ici http://simoncropp.com/working-around-xml-namespaces

var xDocument = XDocument.Parse(
@"<root>
    <f:table xmlns:f=""http://www.w3schools.com/furniture"">
        <f:name>African Coffee Table</f:name>
        <f:width>80</f:width>
        <f:length>120</f:length>
    </f:table>
  </root>");

xDocument.StripNamespace();
var tables = xDocument.Descendants("table");

public static class XmlExtensions
{
    public static void StripNamespace(this XDocument document)
    {
        if (document.Root == null)
        {
            return;
        }
        foreach (var element in document.Root.DescendantsAndSelf())
        {
            element.Name = element.Name.LocalName;
            element.ReplaceAttributes(GetAttributes(element));
        }
    }

    static IEnumerable GetAttributes(XElement xElement)
    {
        return xElement.Attributes()
            .Where(x => !x.IsNamespaceDeclaration)
            .Select(x => new XAttribute(x.Name.LocalName, x.Value));
    }
}

J'ai eu un problème similaire (besoin de supprimer un attribut d'espace de nom d'un élément particulier, puis de renvoyer le code XML sous forme de XmlDocument à BizTalk), mais une solution bizarre.

Avant de charger la chaîne XML dans l'objet XmlDocument , j'ai effectué un remplacement de texte pour supprimer l'attribut d'espace de nom en cause. Cela a semblé faux au début car je me suis retrouvé avec du XML qui n'a pas pu être analysé par le "Visualiseur XML". dans Visual Studio. C’est ce qui m’avait au départ mis cette approche de côté.

Cependant, le texte peut toujours être chargé dans le XmlDocument et je peux le sortir dans BizTalk fine.

Notez aussi que plus tôt, je tentais d'utiliser childNode.Attributes.RemoveAll () pour supprimer l'attribut d'espace de nom.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top