提问人:Andrei Hryhoryeu 提问时间:10/6/2016 更新时间:10/6/2016 访问量:437
C# XmlReader:解析 XHTML 时保留 nbsp 实体
C# XmlReader: preserve nbsp entity when parsing XHTML
问:
我需要解析一个(几乎)任意的XML字符串,该字符串是从XHTML获取的。例如。为了解决XHTML实体的问题,我按以下方式进行配置:<root>test default values & <></root>
XmlReader
private XmlParserContext GetXhtmlParserContext()
{
var nameTable = new NameTable();
var namespaceManager = new XmlNamespaceManager(nameTable);
var context = new XmlParserContext(nameTable, namespaceManager, null, XmlSpace.Preserve)
{
DocTypeName = XhtmlDocTypeName,
PublicId = XhtmlPublicId,
SystemId = XhtmlSystemId
};
return context;
}
private XmlReaderSettings GetXhtmlReaderSettings()
{
return new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Parse,
ValidationType = ValidationType.DTD,
XmlResolver = new XmlPreloadedResolver(XmlKnownDtds.All)
};
}
然后我按以下方式使用它:
public XmlNode DeserializeXhtml(string xhtmlContent)
{
var xmlSerializer = new XmlSerializer(typeof(XmlNode));
XmlParserContext context = GetXhtmlParserContext();
XmlReaderSettings settings = GetXhtmlReaderSettings();
using (var stringReader = new StringReader(xhtmlContent))
{
using (var xmlReader = XmlReader.Create(stringReader, settings, context))
{
return (XmlNode)xmlSerializer.Deserialize(xmlReader);
}
}
}
它工作得很好,除了一个问题:出于某种原因,当从字符串读取时,它确实将实体转换为实际的空格。因此,我得到了一个包含在 InnerXml 属性中的属性。如果可能的话,我真的需要保留实体。有什么办法可以做到吗?
XmlNode
test default values & <>
提前致谢。
PS 我认为这可能不是从字符串获取的最佳方式,但这不是我的代码,我将不胜感激任何建议。XmlNode
答: 暂无答案
评论
&
<
>