我需要将字符串转换为XmlNode并将其添加到现有的Xaml文件中.
我的Xml字符串包含特殊字符.
这是我的Xml字符串(来自T4模板),其中包含""作为属性值.
<Button Margin="10,0,0,0" Width="100" Height="100" HorizontalContentAlignment="Center"
Background="{StaticResource TopAppbarTileBackground}"
x:Name="chanceAppBarButton">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock ***Text=""*** VerticalAlignment="Top" HorizontalAlignment="Center"
TextAlignment="Center" Style="{StaticResource TopAppbarIconStyle}"/>
<TextBlock Grid.Row="1" Style="{StaticResource TopAppbarTileTextStyle}" x:Uid="chanceAppBarButtonLabel"
VerticalAlignment="Top" Margin="0" HorizontalAlignment="Center"
TextAlignment="Center"/>
</Grid></Button>
Run Code Online (Sandbox Code Playgroud)
下面是将Xml String转换为Node并将其附加到现有文件的代码(部分).
var xmldoc = new XmlDocument();
xmldoc.Load(filePath);
XmlElement rootElement = xmldoc.DocumentElement;
XmlNode xmlNode = CreateNodeFromXmlString(xmlNodeString, namespaceList);
XmlNode importNode = rootElement.OwnerDocument.ImportNode(xmlNode, true);
rootElement.AppendChild(importNode); // Add Xml node to Parent Element
xmldoc.Save(filePath); // Save Xml file
private static XmlNode CreateNodeFromXmlString(string xml, Dictionary<string, string> namespaceList)
{
var newDataTemplateDocument = new XmlDocument();
var nameTable = new NameTable();
var xmlNamespaceManager = new XmlNamespaceManager(nameTable);
foreach (var namespaceItem in namespaceList)
{
xmlNamespaceManager.AddNamespace(namespaceItem.Key, namespaceItem.Value);
}
var context = new XmlParserContext(nameTable, xmlNamespaceManager, null, XmlSpace.None);
var reader = new XmlTextReader(xml.Trim(), XmlNodeType.Element, context);
return newDataTemplateDocument.ReadNode(reader);
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是(只显示按钮控件):
<Button Margin="10,0,0,0" Width="100" Height="100" HorizontalContentAlignment="Center"
Background="{StaticResource TopAppbarTileBackground}"
x:Name="chanceAppBarButton">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text=" î„" VerticalAlignment="Top" HorizontalAlignment="Center"
TextAlignment="Center" Style="{StaticResource TopAppbarIconStyle}"/>
<TextBlock Grid.Row="1" Style="{StaticResource TopAppbarTileTextStyle}" x:Uid="chanceAppBarButtonLabel"
VerticalAlignment="Top" Margin="0" HorizontalAlignment="Center"
TextAlignment="Center"/>
</Grid></Button>
Run Code Online (Sandbox Code Playgroud)
这里""被替换为"î"".
知道如何在读/写XML时停止转义特殊字符?
默认情况下,XML以UTF8编码写出.在UTF8中,ASCII范围之上的字符表示为2到3个字节的序列.我没有检查过,但我认为XML序列化程序完全正确,如果你解析XML,你将得到你的0xE10F字符.从XML的角度来看,这是一个没有区别的差异.
如果您真的想要使用数字字符实体,请告诉序列化程序使用ASCII作为其编码.ASCII不能直接表示0xE10F字符,序列化器将实现这一点并使用字符实体来解决问题.
| 归档时间: |
|
| 查看次数: |
1441 次 |
| 最近记录: |