C#の各XML要素から「xmlns:...」名前空間情報を削除するにはどうすればよいですか?
Marc
質問する
13296 次
3 に答える
10
Zombiesheep の注意深い回答にもかかわらず、私の解決策は、これを行うために xslt 変換で xml を洗い流すことです。
ウォッシュ.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>
于 2009-01-05T13:27:56.380 に答える
6
ここから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));
}
}
于 2011-10-09T00:00:09.827 に答える
2
同様の問題がありました (特定の要素から名前空間属性を削除し、XML を BizTalk に返す必要がありますXmlDocument
) が、奇妙な解決策でした。
XML 文字列をオブジェクトにロードする前にXmlDocument
、テキスト置換を行って問題のある名前空間属性を削除しました。Visual Studio の「XML ビジュアライザー」で解析できない XML になってしまったので、最初は間違っているように思えました。これが、最初にこのアプローチをやめさせた理由です。
ただし、テキストは引き続き にロードできXmlDocument
、BizTalk に正常に出力できました。
前に、namespace 属性を削除するために を使用しようとしたときに 1 つの袋小路にぶつかったことにも注意してくださいchildNode.Attributes.RemoveAll()
- それはちょうど戻ってきました!
于 2010-06-10T09:09:17.383 に答える