我想從輸入中讀取字符串XML片段,使用XmlReader,操作XDocument並將結果輸出爲字符串。
如果有一個對未知XML名稱空間的引用,我只想保留這個引用,而不是以任何方式修改。
注意我不知道可能的命名空間列表,因此手動創建命名空間白名單不是一個選項。
我的目標是UWP平臺,所以XmlTextReader不能在這裏使用。如何用C#XmlReader忽略未知的命名空間?
採樣輸入XML文檔:
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="RootGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
預期輸出XML文檔的樣本:
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Target="RootGrid.Background" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
<Setter Target="ContentPresenter.Foreground" Value="{ThemeResource SystemControlDisabledBaseMediumLowBrush}" />
<Setter Target="ContentPresenter.BorderBrush" Value="{ThemeResource SystemControlDisabledTransparentBrush}" />
</VisualState.Setters>
</VisualState>
我目前的解析XML代碼:
using (StringReader sr = new StringReader(xml))
{
using (XmlReader xtr = XmlReader.Create(sr))
{
return XDocument.Load(xtr);
}
}
我認爲這個問題是拋出一個異常?由於XML片段不是缺少名稱空間聲明的有效XML文檔,因此您在這裏有點困難。 'XmlTextReader'有一個關閉命名空間支持的模式(並允許冒號作爲名稱字符),但我認爲你不會在其他任何地方找到它。 –